码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-02-01 22:15:07      阅读:413      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!