在C中寻找从1到300的素数

在C中寻找从1到300的素数,c,primes,C,Primes,我用C语言键入了以下程序: #include <stdio.h> int main () { int i = 1, a = 2; while (i <= 300) { while (a < i) { if (i % a == 0) break; else printf ("%d\n", i);

我用C语言键入了以下程序:

#include <stdio.h>
int main ()
{
    int i = 1, a = 2;
    while (i <= 300)
    {
        while (a < i)
        {
            if (i % a == 0)
                break;
            else
                printf ("%d\n", i);
            a++;
        }
        i++;
    }
    return 0;
}
#包括
int main()
{
int i=1,a=2;

而(i在进入循环之前,您需要将a设置回2:

#include <stdio.h>
int main ()
{
    int i = 1, a = 2;
    while (i <= 300)
    {
        a = 2; // add this line
        while (a < i)
        {
                if (i % a == 0)
                break;
                else
                printf ("%d\n", i);
                a++;
        }
        i++;
    }
    return 0;
}
#包括
int main()
{
int i=1,a=2;

(i除了您没有将
a
重置为2之外,
printf()
语句的位置不正确。这将打印不能被2除的
i
的任何数目(即使它可以被另一个数除)

按如下方式更改代码:

#include <stdio.h>
int main ()
{
    int i = 1, a = 2, is_prime;
    while (i <= 300)
    {
        is_prime = 1;

        while (a < i)
        {
              if (i % a == 0) {
                is_prime = 0;
                break;
              }

              a++;
        }

        if(is_prime)
          printf ("%d\n", i);

        a = 2;
        i++;
    }
    return 0;
}
#包括
int main()
{
int i=1,a=2,是_素数;

while(我将每个数字的
a
重置为2,包含所有警告和调试信息(例如
gcc-Wall-g
,如果使用)。现在学习如何使用调试器(例如Linux上的
gdb
);这是一项在你的编程生涯中都很有用的技能。此外,每当你发现一个非除数时打印数字也是错误的。
inti=1,a=2;
现在不需要将值
2
赋给
a
。这个答案解决了第一个问题,但正如博洛夫在上面的评论中提到的,你应该打印
i
>仅当无
a
小于
i
除以
i
,而不是
i
的每个非除数时,否则任何奇数将至少显示一次。