此代码应根据用户输入计算素数的数量。如果用户输入为10,那么我应该得到4。但是,我只能得到0。为什么第二个循环不运行?
functionWhichRecieveFunction
答案 0 :(得分:0)
从您的代码来看,P
的开头是1
,因此e
是sqrt(1)
,又是1
,还有{{1 }}是j
。因此,3
不小于或等于j
,并且内部循环顶部的测试失败,因此该循环不会在第一次执行。对于外部循环的每次迭代,此模式都会继续,直到P变得足够大以致1
大于sqrt(P)
为止,此时内部循环会运行。
答案 1 :(得分:0)
为什么第二个循环不运行?
在e
等于3的情况下,它确实运行一次(这意味着在P
等于9的情况下会发生这种情况)。
更改此:
for (P; P<N; P++)
对此:
for (; P <= N; P++)
由于第一部分无效,更重要的是,您要检查所有N
号,因此必须修改停止条件。
然后,您需要更改此内容:
for (int j=3;j<=e;j+=2)
对此:
for(int j = 2; j <= e; j+=2)
为了检查素数,建议使用here。
此外,您需要更改此内容:
if (P % j != 0)
对此:
if (P % j == 0)
因为P
实际上是满足条件的素数。
此外,您需要摆脱这一点:
if(P % 2 == 0) continue;
因为例如2是质数,但是它满足此条件,因此不会考虑!