清华计算机机试知识点,2010年清华大学计算机研究生机试真题

/*

N =a0+a1*k+a2*k^2+......ar*k^r;

N'=a0+a1 +a2 +......ar;

N-N' = a1(k-1)+a2(k^-1)+......+ar(k^r-1)

右边提取k-1,可以得出结论:

(N-N')%(k-1)=0

这样递推下去,

(N-N')%(k-1)=0

(N'-N'')%(k-1)=0

....

(N(r-1)-N(r))%(k-1)=0

直到N(r) < k

所有式子相加(N - N(r))%(k-1)=0,N(r)是我们要求的结果...

注意是求x^y%(k-1),如果x^y%(k-1)==0,则输出k-1,否则输出x^y%(k-1)

*/

#include

#include

using namespace std;

inline long long mod_exp(long long x,long long y,int mod) //快速二分求幂(x^y)%mod

{

long long ans=1;

while(y)

{

if(y&1)

{

ans*=x;

if(ans>=mod)

ans%=mod;

}

x*=x;

if(x>=mod)

x%=mod;

y>>=1;

}

return ans;

}

int main(void)

{

int k;

long long x,y,temp;

while(scanf("%lld %lld %d",&x,&y,&k)!=EOF)

{

temp = mod_exp(x,y,k-1);

if(temp == 0)

printf("%lld\n",k-1);

else

printf("%lld\n",temp);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值