题目:

给定两个数字n,求有多少个数字b满足a^b和b^a同余于2^n,其中n<=30,a<=10^9,

题解:

挺巧妙的一道题···从中深深体会到打表的重要性···

首先根据ab奇偶性分情况讨论···若ab奇偶性不同的话肯定不会满足条件···因此要么ab同时为奇数··要么同时为偶数··

若ab同时为奇数··根据打表(证明考试时我是想不到的···)可得只有当ab相等时条件才成立··

若ab同时为偶数···当b<=n时可以直接暴力求··当b>n时,可以解得a^b肯定是可以被2^n整除的··因此我们要求b^a可以被2^n整除的个数··我们设b=2^k*c,其中c为奇数··可得b^a=2^(k*a)*(c^a),因此可以得出2^(k*a)>=2^n,推出k>=n/a,因此我们可以推出2^(n/a)肯定是整除b的··因此我们只需要找出在n到2^n的范围中有多少个数可以被2^(n/a)整除即可··注意这里的除法是向上取整

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
long long Bit[],mod,T,n,a;
inline long long ksm(long long a,long long b)
{
long long ans=;
while(b)
{
if(b%==) ans=ans*a%mod;
b/=;a=a*a%mod;
}
return ans;
}
inline void pre()
{
Bit[]=;
for(int i=;i<=;i++) Bit[i]=Bit[i-]*;
}
inline long long R()
{
char c;long long f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar()) f=f*+c-'';
return f;
}
int main()
{
//freopen("math.in","r",stdin);
// freopen("math.out","w",stdout);
pre();T=R();
while(T--)
{
a=R();n=R();int ans=;mod=Bit[n];
if(a%==)
{
cout<<""<<endl;
continue;
}
else
{
for(int i=;i<=n;i++)
if(ksm(a,i)==ksm(i,a)) ans++;
int temp=(n+a-)/a;
int up=Bit[n]/Bit[temp];
int down=n/Bit[temp];ans+=up-down;
cout<<ans<<endl;
}
}
return ;
}

最新文章

  1. 【干货分享】流程DEMO-人员调动流程
  2. Spring ApplicationContext 简解
  3. JAVA代理模式与动态代理模式
  4. php7 编译安装 apache
  5. PYTHON学习之路_PYTHON基础(3)
  6. yaourt: a pacman frontend(pacman前端,翻译)
  7. poj1474Video Surveillance(半平面交)
  8. RMAN备份与恢复之删除过期备份
  9. 对于GLM的理解,与方差分析的对比
  10. Ubuntu14.02 Sublimte2安装
  11. 转:一道笔试题-将int型数组强制转换为char*,再求strlen,涉及大小端
  12. Linux下安装yum工具
  13. AngularJS vs. jQuery,看看谁更胜一筹
  14. 算法起步之kmp算法
  15. OpenTSDB介绍
  16. 【Android 应用开发】Android中的回调Callback
  17. .NET 中的序列化 &amp; 反序列化
  18. Pycharm2018的激活方法或破解方法(必须加host)
  19. DELPHI新的变量的声明方法
  20. Logistic Regression总结

热门文章

  1. CPP-网络/通信:gsoap 的教程和使用
  2. python 与 json
  3. c#和Java中的多态
  4. jQuery向界面输出时保留两位小数
  5. mysql crash cource 书中实例
  6. 03_6_package和import语句
  7. c++ 创建路径方法
  8. java--String、StringBuilder、StringBuffer的解析和比较?
  9. Python基础——集合(set)
  10. GoF23种设计模式之行为型模式之策略模式