对于表达式(数字均为十进制数): (319570873830358677766204855298122686115^267883928491927118605551155696238269887)/340282366920938463463374607431751499777 该怎么用C编程解决?有什么思路?(a^b表示a的b次幂)
化简,对于
(a^b)%c
如果 a >= c,可以简化为
d = a%c
(d^b)%c
否则可以简化为
( ((a^2)^(b/2))%c * a ) % c
一直这样化下去,最终为
( x * y ) % c
// 公式 ( a^b * w ) % c
a = 319570873830358677766204855298122686115
b = 340282366920938463463374607431751499777
c = 340282366920938463463374607431751499777
w = 1
if( a >= c )
a %= c;
for( ; b>0; )
{
w = ( (b%2)*a * w )%c;
a = (a*a)%c;
b = b/2;
}
return w;
来源