C语言,求a的b次方,然后对n求模。。

比如 3673的9057次方, 对12091进行求模,结果不会溢出的,谢谢
2025-02-15 08:35:15
推荐回答(1个)
回答1:

这个不能用常规方法一步一步计算的。。有个“快速幂取模”算法。。
程序如下。。

#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