C 模幂运算
在C/C++中,如果C 模幂运算,c,modulus,exponentiation,C,Modulus,Exponentiation,在C/C++中,如果b不适合64位,如何计算(a^b)%m?换句话说,是否有一种方法可以使用b%m而不是b来计算上述值 如果a和m是互质的,那么有没有任何算法可以在O(log(b))time或O(log(b%m))time中计算上述结果 ab mod m=ab mod phi(m)mod m 因此,如果b很大,可以使用b%phi(m)值代替bphi(m)是,如果您知道m的素因子分解,就可以很容易地计算出它 以这种方式减少b的值后,使用来计算O(log(b%phi(m))中的模幂运算。这更像是一个
b
不适合64位,如何计算(a^b)%m
?换句话说,是否有一种方法可以使用b%m
而不是b
来计算上述值
如果a
和m
是互质的,那么有没有任何算法可以在O(log(b))
time或O(log(b%m))
time中计算上述结果
ab mod m=ab mod phi(m)mod m
因此,如果b
很大,可以使用b%phi(m)
值代替b
phi(m)
是,如果您知道m
的素因子分解,就可以很容易地计算出它
以这种方式减少
b
的值后,使用来计算O(log(b%phi(m))
中的模幂运算。这更像是一个数学问题。你是说b不适合64位吗?通常的求幂算法是,如果设置了b的下一位,则将结果乘以a,然后进行平方运算。这对于大b来说似乎很容易,大a和m很难,是的,让我们假设b是一个斐波那契数,a&m<10^9。如何找到(a^b)%m。假设我使用对数(n)矩阵求幂算法来寻找b。我应该如何使用中间的b值?吹毛求疵:只有当a和m是互质时,这才是真的。@Henrik:这意味着即使m是素数且aa
和m
作为互质。