【发布时间】:2015-03-15 15:40:08
【问题描述】:
我正在阅读 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;
}
如果它的名称是它所做的任何指示,它会检查一个数字是否是素数。但是,我无法弄清楚它是如何做到的。
我可以理解每个语句的作用,但我不明白它是如何工作的。
【问题讨论】:
-
在调试器中运行,并调用一个小素数,然后逐行执行代码,同时查看所有变量如何变化以及它们变化的内容。
-
@yasar 它基于小费马定理