在米勒拉宾算法中的检查函数中,而循环为什么我们使用" x = mod(x, x, n) "这个?



代码完整链接:完整代码链接

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函数的名称不正确--它应该被称为mulmulmod--mod(a, b, n)计算一个*b模n。

所以mod(x, x, n)只是x的平方。

相关内容

最新更新