假设我们要计算 2 10 2^{10} 210 对1000取模的结果,可以很简单的得到24。但是如果要求 2 1000 2^{1000} 21000 对1000取模的结果,常规方法就行不通了,因为常规的变量无法容纳这么大的数值。为此,需要借助数学技巧求解。
循环求余法
首先引入一个好理解的取模运算公式:
( a × b ) % p = ( a % p × b % p ) % p (a \times b) \% p = (a \% p \times b \% p) \% p (a×b)%p=(a%p×b%p)%p
举个例子:
a = 9 , b = 9 ( 9 × 9 ) % 6 = ( 9 % 6 × 9 % 6 ) % 6 = ( 3 × 3 ) % 6 = 3 a=9, b=9\\ (9 \times 9) \% 6 = (9\%6 \times 9\%6)\%6 = (3 \times 3) \% 6 = 3 a=9,b=9(9×9)%6=(9%6×9%6)%6=(3×3)%6=3
受上面计算过程的启发,不难得到下面的取模运算公式:
x a % p = ( ( x % p ) a ) % p x^a \% p = \left( (x \% p)^a \right) \% p xa%p