我遇到了关于如何检查数字是否为素数的堆栈溢出问题。答案是下面的代码。当数字为素数0时,函数int is_prime(int num)
返回1,否则返回。
int is_prime(int num)
{
if (num <= 1) return 0;
if (num % 2 == 0 && num > 2) return 0;
for(int i = 3; i < num / 2; i+= 2)
{
if (num % i == 0)
return 0;
}
return 1;
}
除了for循环表达式之外,if
语句中的所有逻辑对我都有意义。我不明白为什么分区i < num / 2
发生以及为什么i+= 2
被使用。当然有一个是推进计数器,另一个是停止循环。但为什么一半的数字和为什么增加两个。任何合理的解释将不胜感激。谢谢。
答案 0 :(得分:0)
关于循环的增量:
第二个if
(if (num % 2 == 0)
)检查数字是否为偶数,如果是,则终止该函数。如果函数没有被终止,我们知道它是奇数,因此,只能被其他奇数整除。因此,循环从3开始,并根据一系列奇数检查数字 - 即,在每次迭代时将潜在除数递增2。
关于循环的停止条件:
大于1的最小整数是2.因此,可以除以整数n的最大整数是n / 2。因此,循环可以达到num/2
。如果它num
到达num/2
时没有找到除数,它就没有机会找到这样的除数,所以继续前进是没有意义的。