扩展欧拉定理
https://zhuanlan.zhihu.com/p/131536831
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <bits/stdc++.h> using namespace std; bool large_enough = false ; // 判断是否有b >= phi(m) inline int read( int MOD = 1e9 + 7) // 快速读入稍加修改即可以边读入边取模,不取模时直接模一个大于数据范围的数 { int ans = 0; char c = getchar(); while (!isdigit(c)) c = getchar(); while (isdigit(c)) { ans = ans * 10 + c - '0' ; if (ans >= MOD) { ans %= MOD; large_enough = true ; } c = getchar(); } return ans; } int phi( int n) // 求欧拉函数 { int res = n; for ( int i = 2; i * i <= n; i++) { if (n % i == 0) res = res / i * (i - 1); while (n % i == 0) n /= i; } if (n > 1) res = res / n * (n - 1); return res; } int qpow( int a, int n, int MOD) // 快速幂 { int ans = 1; while (n) { if (n & 1) ans = 1LL * ans * a % MOD; // 注意防止溢出 n >>= 1; a = 1LL * a * a % MOD; } return ans; } int main() { int a = read(), m = read(), phiM = phi(m), b = read(phiM); cout << qpow(a, b + (large_enough ? phiM : 0), m); return 0; } |
另一个证明方式,其求得是a^b Mod M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <iostream> #include <cstdio> using namespace std; int a,b,m,temp,phi,ans=1; bool flag; int main() { int i; char c; scanf( "%d%d" ,&a,&m); temp=phi=m; for (i=2;i*i<=m;++i) //计算phi { if (temp%i==0) { phi=phi-phi/i; while (temp%i==0) { temp/=i; } } } if (temp>1) { phi=phi-phi/temp; } while (!isdigit(c=getchar())); //边读入b边取模 for (;isdigit(c);c=getchar()) { b=b*10+c- '0' ; if (b>=phi) { flag= true ; b%=phi; } } if (flag) //只有b>=phi时才b+=phi { b+=phi; } for (i=20;i>=0;--i) //快速幂,不是必需的 { ans=1ll*ans*ans%m; if (b&(1<<i)) { ans=1ll*ans*a%m; } } cout<<ans; return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-12-02 【bzoj3544】[ONTAK2010]Creative Accounting 前缀和+STL-set
2020-12-02 【bzoj2083】[Poi2010]Intelligence test STL-vector+二分查找
2020-12-02 【loj6177】「美团CodeM初赛RoundB」送外卖2Floyd+状压dp
2020-12-02 [BZOJ3717][PA2014]Pakowanie