题目链接:1046
求a^b mod c 是多少, 重点是a,b的范围都是10^9,简单模拟坑定是要超时的。学会了一种技巧:快速幂。
这一题隔得太久,已经忘了原理了。
下面是快速幂的核心代码:
int pow3( int a, int b )
{
int r = 1, base = a;
while( b != 0 )
{
if( b & 1 )
r *= base;
base *= base;
b >>= 1;
}
return r;
}
下面是51nod1046的代码:
#include<stdio.h>
typedef long long ll;
long long int mi(ll a,ll b,ll k)
{
ll r=1,base=a;
while(b!=0)
{
if(b&1)
r=(r*base)%k;
base=(base*base)%k;
b>>=1;
}
return r;
}
int main()
{
long long int m,n,k;
while(scanf("%lld%lld%lld",&m,&n,&k)!=EOF)
{
printf("%lld\n",mi(m,n,k));
}
}
qishibutai