BZOJ 3884 上帝与集合的正确用法(数论)
来源:互联网 发布:java服务器 编辑:程序博客网 时间:2024/05/17 21:43
Description
求
Input
第一行一整数T表示用例组数,每组用例占一行输入一个正整数p(T<=1000,p<=10^7)
Output
对于每组用例,输出答案
Sample Input
3
2
3
6
Sample Output
0
1
4
Solution
由指数循环定理
每次往上幂一层模数就取一次欧拉函数值,由于一个数的欧拉函数值一定小于自身,所以至多经过O(log p)次操作模数就变成了1,那么上面的幂就没有意义了,无限幂就变成了有限幂
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;int euler(int n){ int ans=n; for(int i=2;i*i<=n;i++) if(n%i==0) { ans=ans/i*(i-1); while(n%i==0)n/=i; } if(n>1)ans=ans/n*(n-1); return ans;}ll mod_pow(ll a,ll b,int p){ ll ans=1; while(b) { if(b&1)ans=ans*a%p; a=a*a%p; b>>=1; } return ans;}int deal(int p){ if(p==1)return 0; int temp=deal(euler(p)); return mod_pow(2,temp+euler(p),p)%p;}int main(){ int T,p; scanf("%d",&T); while(T--) { scanf("%d",&p); int ans=deal(p); printf("%d\n",ans); } return 0;}
0 0
- BZOJ 3884 上帝与集合的正确用法(数论)
- bzoj 3884: 上帝与集合的正确用法 (数论)
- BZOJ 3884: 上帝与集合的正确用法|数论
- [BZOJ 3884] 上帝与集合的正确用法【欧拉定理/初等数论】
- BZOJ 3884(上帝与集合的正确用法-欧拉函数递推找极限)[Template:数论 V2]
- BZOJ 3884 上帝与集合的正确用法
- 【BZOJ 3884】上帝与集合的正确用法
- 【数学】[BZOJ 3884] 上帝与集合的正确用法
- 【BZOJ 3884】上帝与集合的正确用法【欧拉降幂】
- 上帝与集合的正确用法 [Bzoj 3884]
- BZOJ 3884 上帝与集合的正确用法
- 【BZOJ】3884: 上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法
- BZOJ 3884 上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法
- [BZOJ 3884]上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法
- 数论专题练习:【bzoj3884】上帝与集合的正确用法
- Qt 中的字体
- SAP PP模块—事务代码
- 对称 非对称 加密算法在网络通信中的应用
- linux命令nohup详解
- 第一篇:OpenCV和BoofCV选哪个?
- BZOJ 3884 上帝与集合的正确用法(数论)
- Sublime Text 3 自定义快捷键
- 静态查找
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类
- 删除后动态效果
- 10011----MindJet MindManager试用期
- java MD5加密,并转化为16进制字符
- HTTP和TCP协议区别
- 如何查找报表用了哪些变量,以及如何看哪些报表用了这个变量