c - 循环内的循环不运行

标签 c primes

此代码应根据用户输入计算素数的数量。如果用户输入是 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/

相关文章:

c - 为什么下面的程序中要添加 '\0'?

c - 不懂简单的C程序if/else结果

Java Prime 检查器

c - c 中的素数和立方和

algorithm - 我有一个新算法可以在线性时间内找到因子或素数——需要对此进行验证

java - 蛮力法寻找素数

c - 带有信号量卡住的 Linux 内核线程

c - ld : duplicate symbol _dbg_char

c - 为什么我的 Makefile 每次都重新编译?

python - 小于最大值的所有因子产品的枚举