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

时间:2014-08-20 08:34:25

标签: 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);
            a++;
        }
        i++;
    }
    return 0;
}

该程序正在打印许多非素数值,如295275等... 请帮忙,我是初学者,缺乏经验。

2 个答案:

答案 0 :(得分:1)

除了您未将a重置为2之外,printf()语句未正确放置。这将打印任何i的{​​{1}}个,不能除以2(即使它可以除以另一个数字)。

更改您的代码:

#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;
}

答案 1 :(得分:0)

您需要在进入循环之前将其设置为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;
}

你的方法不是很快。您应该阅读本页http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes