当30 ^ 74除以57时的余数是多少?
我通常知道要解决这个问题,你会使用Fermat的Little Theorem,但在这种情况下,57不是素数,所以我不确定如何处理这个问题。有什么想法吗?
答案 0 :(得分:2)
30 ^ 74 mod 57 =(3 ^ 74 * 10 ^ 74)mod 3 * 19 = 3 * [(3 ^ 73 * 10 ^ 74)mod 19]
和
(3 ^ 73 * 10 ^ 74)mod 19 =(3 ^(18 * 4)* 3 * 10 ^(18 * 4)* 10 ^ 2)mod 19
现在,通过Fermst的小定理(m ^(p-1)mod p = 1):
(3 ^ 73 * 10 ^ 74)mod 19 =(3 * 10 ^ 2)mod 19 = 300 mod 19 = 15
因此
30 ^ 74 mod 57 = 3 * 15 = 45
用于获得余数的模幂运算方法的基本实现是:
long modular_pow( long base, long exponent, long modulus) {
long c = 1;
for ( long e_prim = 0; e_prim < exponent; ++e_prim) {
c = (c * base) % modulus;
}
return c;
}
然而@Vikram Bhat所显示的实施效率更高。
答案 1 :(得分:1)
使用模幂运算: -
modexp(a,pow) = (a*modexp(a,pow-1))%p
更快的模幂运算: -
public static long modexp(long a,long pow,long p) {
if(pow==0) {
return(1);
}
long t = modexp(a,pow/2,p);
t = (t*t)%p;
if(pow%2==1) {
t = (t*a)%p;
}
return(t);
}
致电: - modexp(30,74,57)
时间复杂度: O(log(pow))