我用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;
}
该程序正在打印许多非素数值,如295
,275
等...
请帮忙,我是初学者,缺乏经验。
答案 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