您的位置:首页 > 其它

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

2016-02-01 20:23 225 查看
# include<iostream>
using namespace std;
int main(){
long long int x=0,y=0,k=0;
while(cin>>x>>y>>k)
{
long long int sum=1;
k--;
while(y)
{
if(y%2!=0) sum=(sum*x)%k;
x=(x*x)%k;
y=y/2;
}
if(sum==0) cout<<k<<endl;
else cout<<sum<<endl;
}
return 0;
}


参考论坛代码,以及相关博客自己总结如下:

如果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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: