首页 > 其他 > 详细

九度[1085]求root(N,K)

时间:2016-02-01 22:13:51      阅读:155      评论:0      收藏:0      [点我收藏+]
 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;

九度[1085]求root(N,K)

原文:http://www.cnblogs.com/dreamer123/p/5176229.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!