C语言中求素数遇到点小问题,求帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/03 21:08:14
输出20到200之间的素数及这些素数的和,每行输出6个数。
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,k,sum=0,m=0;
for(i=20;i<201;i++)
{
j=sqrt(i);
for(k=2,k<=j;k++;)
{
if(i%k==0)
break;
printf("%d ",i);
++m;
if(m%6==0)
printf("\n");
}
sum=sum+i;
}
printf("\n20至200中素数之和为\n%d\n",sum);
}
请帮忙看下问题在哪 该怎样改 谢谢了
一楼的回答能说得再清楚些吗?我还没学布尔型指示变量。能用些初级的东西解决吗?

可以改为这样:
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,k,sum=0,m=0;
for(i=20;i<201;i++)
{
j=sqrt(i);
for(k=2;k<=j;k++)
{
if(i%k==0)
goto lop;
}
printf("%d",i);
++m;
if(m%6==0)
printf("\n");

sum=sum+i;
lop:;
}
printf("\n20至200中素数之和为\n%d\n",sum);
}
你那个输出在if之后马上就输出,即当一个数不能被2整除后它马上输出,此时并没有判断它是否能被2到sqrt(i)后面的数整除,应该把输出素数那语句放在第二个for语句之外

if(i%k==0)
break;
printf("%d ",i);
你这里输出得太急,如果i不能被2整除就输出了,也就是k还没有累加到j就把i做为素数输出了。你加一个布尔型的指示变量,如果在k从2到j的过程中,只要整除就是false,如果循环结束一直是true就证明是素数,然后输出。
=================
你看看i=9时会发生什么就知道错在哪里了。
布尔型就是true或false,你可以用0或者1表示能否被k整除。

//输出20到200之间的素数及这些素数的和,每行输出6个数。
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,k,l,sum=0,m=0;
for(i=20;i<200;i++)