代码完整链接:完整代码链接
bool check(ll a, ll d, ll n)
{
ll x = power(a, d, n);
if (x == 1 || x == n - 1)
return true;
while (d != n - 1)
{
x = mod(x, x, n);
d = (d << 1); /*** d = d * 2 ***/
if (x == 1)
return false;
if (x == n - 1)
return true;
}
return false;
}
mod
函数的名称不正确--它应该被称为mul
或mulmod
--mod(a, b, n)
计算一个*b模n。
所以mod(x, x, n)
只是x的平方。