int isPrime(int number)
{
int i;
for(i=2; i*i <= number; i++)
{
if (number % i == 0)
{
return 0;
}
}
return 1;
}
为什么控制语句的布尔条件是:i * i&lt; = number?
请深刻的数学解释!
答案 0 :(得分:3)
如果某个数字不素数,则可以使用p * q
形式编写。在不失一般性的情况下,我们可以说p
不能大于q
(因为我们总能以这种方式编写乘法)。
因此,在检查素数时,您只需要检查p
,因为q
将被隐式检查。
因此p
不超过q
是限制。因此p
* p
。
(顺便说一句,迭代所有数字(i++
)效率也很低 - 你只需要考虑质数。选择合适的算法实际上取决于你的用例而没有进一步的细节我不能进一步评论。)。
答案 1 :(得分:2)
当不是素数时,其中一个因子总是&lt; = sqrt(n),(如果潜在因子是&gt; sqrt(n),它已经使用循环找到了),所以
i <= sqrt(n)
如果你对不平等的两个方面加以平衡:
i*i <= n
在此约束之外找不到任何解决方案。
答案 2 :(得分:0)
更好的是,你可以从i = 3开始,每次迭代时将i增加2!
if (number % 2 == 0) return 0;
for(i=3; i*i <= number; i+=2)
{
if (number % i == 0)
{
return 0;
}
}