C语言 素数循环逻辑

4smxwvx5  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(128)

我想问你一些事情,我不明白为什么它的工作。我需要做一个代码,你输入一些数字,它给你所有的素数,直到你得到的数字。
现在我有了这个代码,就像每一个不是素数的数字,它会去下一个n,然后检查它,但我不明白,如果它得到4,然后把它变成5,j不会去3,然后你开始检查5/3,但你错过了除以2,等等,就像我不明白,它会重置j为2,每次i edd i+1?
此外,如果我给予它像10,它打印11,我不希望它通过原来的数字,我怎么做。
整数;

printf("please enter num ");
scanf_s("%d", &num);
int i, j;
for (i = 2; i < num; i++)
{
    for (j = 2; j < i; j++)
    {

        printf("j=%d ", j);

        if (i % j == 0)
            i += 1;

    }
    printf("%d ", i);

}
c86crjj0

c86crjj01#

1.对于不同的num,“执行此技巧的代码”失败。转到下一个iif (i % j == 0) i += 1;)失败,因为代码需要使用新的i再次针对较小的j进行测试。建议形成helper function

for (i = 2; i < num; i++) {
  if (isprime(i)) printf("%d ", i);
}
  1. Sieve of Eratosthenes是一种更好的方法。@NeilB
hgqdbh6s

hgqdbh6s2#

现在我有了这个代码
不,算法是错误的。
这是

int num;
printf("please enter num ");
scanf("%d", &num);
int i, j;
for (i = 2; i < num; i++)
{
    for (j = 2; j < i; j++)
    {    
        // commented out   printf("j=%d ", j);

        if (i % j == 0)
            i += 1;
    }
    printf("%d ", i);
}

**输入值为30时,**将给予输出

2 3 5 7 11 13 17 19 23 27 29

27不是质数
该算法处理的其他一些值不正确:三十五、八十七、九十五

相关问题