2018京东校招笔试题-数据分析岗

这道京东校招笔试数据分析题目要求找出在1<=a,b,c,d<=n范围内,满足a^b=c^d的组合数量。由于数据范围较大,不能暴力求解。解题思路是通过以较小数字a为基底,计算a^p和a^q作为新底的组合,避免重复和漏判。例如,对于4(2^2)和8(2^3),需要找到2和3的最小公倍数,然后在不超过n的幂指数下,计算满足4^c=8^d的式子个数。解题过程中要避免重复计算,确保效率。" 129102172,11069326,CANoe.DiVa UDS测试时间参数配置详解,"['汽车诊断', '网络协议', '架构', '自动化测试', 'CANoe']
摘要由CSDN通过智能技术生成

题目大意是给出一个数字n,问a^b=c^d(1<=a、b、c、d<=n)这种式子的个数 1^2=1^1 1^1=1^2,这样的算两个,n<=100000.

首先分析题目,n的数据范围肯定是不能暴力的,从其他同学的反馈也表示这题暴力只能过20%

此题的规律在于,以一个较小的数字a当基底 将 a^p 和 a^q(设为m,n)当做新的底来计算m^c=n^d(m、n<=n),才能避免重复和漏判

比如4(2^2)和8(2^3),此时需要计算2和3的最小公倍数,然后再计算在幂指数不超过n的情况下满足4^c=8^d的式子的个数

比如从2^k开始,分别计算底为2^k和(2^(k+1)一直到2^s(2^s<=n&&s>=k+1))的式子,同时要将2^k置为已访问过,防止重复计算(2^k<=n)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <algorithm>
#define LL long long
using namespace std;
const LL p = 1e9+7;
LL gcd(LL a,LL b){
    LL m=a,n=b,c;
    while(b!=0){
        c=a%b;
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值