BZOJ 3884: 上帝与集合的正确用法
来源:互联网 发布:道路数据库 编辑:程序博客网 时间:2024/06/06 17:13
题目大意:求2的2的2的2的。。。。(无穷多个)次方对p取模的值。
题解:
扩展欧拉定理有(a^b)%p=(a^(b%phi(p)+phi(p)))%p,不停递归下去知道p等于1,这样的话不会超过2*log(n)层,最简单的证明:奇数取phi最小减一,偶数最小减一半。
#include<iostream>#include<iomanip>#include<ctime>#include<cmath>#include<cstring>#include<string>#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;int get_phi(int p){ int ans=p; int i; int yuan=p; for(i=2;i*i<=yuan;i++) { if(p==1) break; if(p%i==0) { ans-=ans/i; while(p%i==0) p/=i; } } if(p!=1) ans-=ans/p; return ans;}long long ksm(long long x,int t,int p){ long long re=1; while(t) { if(t&1) re=re*x%p; x=x*x%p; t>>=1; } return re;}int get_ans(int p){ if(p==1) return 0; int phi=get_phi(p); return ksm(2,get_ans(phi)+phi,p);}int main(){ int T; scanf("%d",&T); while(T--) { int x; scanf("%d",&x); printf("%d\n",get_ans(x)); } return 0;}
阅读全文
0 0
- BZOJ 3884 上帝与集合的正确用法
- 【BZOJ 3884】上帝与集合的正确用法
- 【数学】[BZOJ 3884] 上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法|数论
- 【BZOJ 3884】上帝与集合的正确用法【欧拉降幂】
- 上帝与集合的正确用法 [Bzoj 3884]
- BZOJ 3884 上帝与集合的正确用法(数论)
- BZOJ 3884 上帝与集合的正确用法
- 【BZOJ】3884: 上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法
- BZOJ 3884 上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法
- bzoj 3884: 上帝与集合的正确用法 (数论)
- [BZOJ 3884]上帝与集合的正确用法
- BZOJ 3884: 上帝与集合的正确用法
- BZOJ 3884 上帝与集合的正确用法 欧拉定理
- [BZOJ 3884] 上帝与集合的正确用法【欧拉定理/初等数论】
- [BZOJ 3884][欧拉定理]上帝与集合的正确用法
- 剑指offer 面试题32 从 1 到 n 整数中 1 出现的次数
- 深度学习(六十二)SqueezeNet网络设计思想笔记
- 【C++】VS2010生成的程序在安装了vc2010运行库的机器上提示“丢失MSVCR100D.dll”
- View 的绘制 & 事件分发
- IE主页被篡改成hao123并且灰色无法更改
- BZOJ 3884: 上帝与集合的正确用法
- navicat for oracle注册机使用教程oracle客户端安装数据库操作
- i++与++i哪个效率更高
- 分块小水
- 一、Android系统源码下载实战
- 欢迎使用CSDN-markdown编辑器
- 图解Linux命令之--yum命令
- 使用XAMPP配置http服务器
- 【MQ】CentOS7安装RocketMQ