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))中的模幂运算。这更像是一个

在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)
值代替
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
作为互质。