我正在阅读 http://www2.informatik.hu-berlin.de/~weber/slipOff/hashmap_c.html,但对于这个函数的工作原理感到困惑:
static unsigned long isPrime(unsigned long val)
{
int i, p, exp, a;
for (i = 9; i--;)
{
a = (rand() % (val-4)) + 2;
p = 1;
exp = val-1;
while (exp)
{
if (exp & 1)
p = (p*a)%val;
a = (a*a)%val;
exp >>= 1;
}
if (p != 1)
return 0;
}
return 1;
}
如果它的名称可以说明它的功能,那么它检查一个数字是否为质数。然而,我无法弄清它是如何做到的。
我可以理解每个语句的作用,但我不知道它是如何工作的。