1 # include<iostream> 2 using namespace std; 3 int main(){ 4 long long int x=0,y=0,k=0; 5 while(cin>>x>>y>>k) 6 { 7 long long int sum=1; 8 k--; 9 while(y) 10 { 11 if(y%2!=0) sum=(sum*x)%k; 12 x=(x*x)%k; 13 y=y/2; 14 } 15 if(sum==0) cout<<k<<endl; 16 else cout<<sum<<endl; 17 } 18 return 0; 19 }
参考论坛代码,以及相关博客自己总结如下:
如果N>=K 则N=a0+a1*k+a2*k2+……+an*kn;
N(r)=a0+a1+a2+a3+……+an;
N-N(r)=a1*(k-1)+a2*(k2-1)+……+an(kn-1)
(N-N(r))%(k-1)=0;
N(r)=N%(k-1);
故如果N(r)==0 N=k-1;
否则,N(r)就是我们要求的结果;
至于求N,则用到了快速幂取模:(a*b)mod n = ((a mod n) * b ) mod n;
时间: 2024-10-11 01:41:03