此代码应根据用户输入计算素数的数量。如果用户输入是 10,那么我应该得到 4。但是,我只得到 0。为什么第二个循环不运行?
#include<stdio.h>
#include<math.h>
int main()
{
int N;
scanf("%d", &N);
int numprime;
numprime = 0;
int P=1;
for (P; P<N; P++)
{
if (P%2==0)
continue;
int e = sqrt(P);
for (int j=3;j<=e;j+=2)
{
if (P%j!=0)
{
numprime = numprime + 1;
}
else
{
continue;
}
}
}
printf("%d", numprime);
}
最佳答案
Why does the second loop not run?
在输入为 10 的情况下,当 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是素数,但它满足这个条件,并且不会被考虑!
关于c - 循环内的循环不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52819018/