循环内循环不运行

时间:2018-10-15 14:28:17

标签: c primes

此代码应根据用户输入计算素数的数量。如果用户输入为10,那么我应该得到4。但是,我只能得到0。为什么第二个循环不运行?

functionWhichRecieveFunction

2 个答案:

答案 0 :(得分:0)

从您的代码来看,P的开头是1,因此esqrt(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是质数,但是它满足此条件,因此不会考虑!