我被困在一个要求找到 (2^n)%p 的问题中,其中 n 是 10^36 阶的一个非常大的数字,p 是一个素数。如何快速做到这一点?这里 ^ 表示我来的力量在这个算法中,但它会导致堆栈溢出,因为 10^36 非常大
double power(double a,double b,int mod)
{
if (b==0)
return 1;
else if(b%2==0)
return square(power(a,b/2,mod))%mod;
else return power(a,b-1,mod)%mod;
}
他们有任何其他方式或对此有所改进吗?