leetcode-56. 合併區間
阿新 • • 發佈:2021-07-17
結論
把結論記錄下,其實費馬小定理就是尤拉降冪的一個衍生
\(\phi(x)\)表示\(x\)的尤拉函式
對於非特殊的情況下
\[ a^b=\left\{ \begin{array}{rcl} a^b & & {b<\phi(m)}\\ a^{b\;mod\;\phi(m)+\phi(m)} & & {b \geq \phi(m)}\\ \end{array} \right. \]對於\(\gcd(a,m)=1\)
\(a^b=a^{b\;mod\; \phi(m)}\)
而\(\phi(質數)=質數-1\)
所以就可以得到費馬小定理的結論\(a^b=a^{b\;mod\;(m-1)}\)
注意對於非特殊情況的\(+\phi(m)\)不能省略
模板題
程式碼
卷也卷不過,躺又躺不平#include <bits/stdc++.h> using namespace std; typedef long long ll; int a,m,b; int get(int x){ ll ans=x; for(ll i=2;i*i<=x;i++){ if(x%i==0){ ans=ans/i*(i-1); while(x%i==0){ x=x/i; } } } if(x!=1){ ans=ans/x*(x-1); } return ans; } int qpow(int a,int b){ ll ans=1,base=a; while(b){ if(b&1) ans=ans*base%m; base=base*base%m; b=b>>1; } return ans; } int main(){ scanf("%d%d",&a,&m); int mod=get(m); char ch; bool flag=0; while((ch=getchar())!=-1){ if(ch==' ') continue; b=b*10+ch-'0'; if(b>mod) b%=mod,flag=1; } if(flag) b+=mod; printf("%d\n",qpow(a,b)); return 0; }