博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2674-Strange Limit(指数循环节)
阅读量:2029 次
发布时间:2019-04-28

本文共 1162 字,大约阅读时间需要 3 分钟。

题目地址:

题意:已知a1=p,an+1=p^an,bn=an(mod m!),给定p和m,求bn的极限。
思路:我们知道这里写图片描述
我们设这里写图片描述 这里写图片描述
那么存在这里写图片描述
然后y又可以看作是x的子问题,然后一直递归可以求得最后的结果。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(linker, "/STACK:102400000,102400000")typedef long long LL;const int inf=0x3f3f3f3f;const double pi= acos(-1.0);const double esp=1e-6;using namespace std;const int Maxn=1e6+10;int Euler(int n){ int m=floor(sqrt(n+0.5)); int ans=n; for(int i=2;i<=m;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 Mul(LL a,LL b,LL mod){ LL res=0; while(b>0){ if(b&1) res=(res+a)%mod; b>>=1; a=(a+a)%mod; } return res;}LL modxp(LL a,LL b,LL mod){ LL res=1; while(b>0){ if(b&1) res=Mul(res,a,mod); b>>=1; a=Mul(a,a,mod); } return res;}LL Solve(LL a,LL mod){ if(mod==1) return 0; LL t=Euler(mod); return modxp(a,t,mod)%mod*modxp(a,Solve(a,t),mod)%mod;}int main(){ LL a,m; LL fac; int flag=1; while(~scanf("%lld %lld",&a,&m)){ if(!flag) puts(""); else flag=0; fac=1; for(int i=2;i<=m;i++) fac*=i; printf("%lld\n",Solve(a,fac)%fac); } return 0;}
你可能感兴趣的文章
怦然心动的人生整理魔法(笔记)——物品类别整理
查看>>
让人生发生戏剧性变化的整理魔法(笔记)
查看>>
按物品类别整理的心动收纳法(笔记)
查看>>
番茄工作图解——序(笔记)
查看>>
每天最重要的2小时——序(笔记)
查看>>
36.开源项目--git搭建本地Git服务器
查看>>
01.创新与企业家精神——创新实践
查看>>
17.创新与企业家精神——攻其软肋
查看>>
14.openssl编程——错误处理
查看>>
29.openssl编程——PKCS7
查看>>
openssl passwd
查看>>
openssl pkeyutl
查看>>
02.规划过程组表格-责任分配矩阵
查看>>
02.规划过程组表格-质量管理计划
查看>>
02.规划过程组表格-干系管理计划
查看>>
04.监控过程组-合同方状态报告
查看>>
01.openssl-创建证书签名请求
查看>>
02.openssl-密钥的格式转换
查看>>
07.openssl编程——抽象IO
查看>>
14.openssl编程——错误处理
查看>>