这个不能用常规方法一步一步计算的。。有个“快速幂取模”算法。。
程序如下。。
#include
#include
long mul(long a,long b,long c)
{
long ans = 0,tmp = a % c;
while(b)
{
if(b&0x1)
if((ans += tmp) >= c) ans -= c;
if((tmp <<= 1) >= c) tmp -= c;
b >>= 1;
}
return ans;
}
//幂取模函数 参数是a^b%c相对应的
long mod(long a,long b,long c)
{
long ret = 1 % c;
while(b)
{
if(b&0x1)
ret=mul(ret,a,c);
a=mul(a,a,c);
b>>=1;
}
return ret;
}
int main(void)
{
long a, b, c;
printf("求 a^b%%c 的值:\n");
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
printf("c = ");
scanf("%d", &c);
printf("%d的%d次方,对%d取模的结果为:%d\n", a, b, c, mod(a, b, c));
getch();
return (0);
}
运行结果如下。。
原理的话您可以参考以下,我也就不复制了。。
http://zhidao.baidu.com/question/52017297.html