//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
#include<stdio.h>
int main()
{
long i,n,j=2;
int flag=1;
scanf("%ld",&n);
for(j=2;j<n;j++)
{
for(i=2;i<j;i++)
{
if(j%i==0)
flag=0;
if(flag==1)
printf("%d",j);
}
if(j==2)
printf("%d",j);
}
return 0;
}
为么结果总是23,要怎样改才正确?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注按博主所写,确实输入什么数都是2和3。为什么?

因为红框部分的判断是虽然有思路在,但是这样输出是不合理的。改了一下:
#include<stdio.h> #include<math.h> int main() { int i,n,j=2; int flag=1; scanf("%d",&n); for(j=2; j<n; j++) { flag=1; for(i=2; i<=sqrt(j); i++) { if(j%i==0) flag=0; } if(flag==1) printf("%d ",j); } return 0; }运行结果如图:

下面另一个方法也可供题主参考:
//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。 #include<stdio.h> #include<math.h> //判断是否是素数 int isPrime(int a) { int j; for (j = 2; j <= sqrt(a); j++){ if (a%j == 0) return 1; } return 0; } int main() { int i,n,num=0; //输入n scanf("%d",&n); for (i=2;i<=n;i++){ if(isPrime(i)==0){ printf("%5d", i); num++; if(num%10==0) printf("\n"); } } if(num<10){ printf("\n"); } return 0; }希望对题主有所帮助,望采纳!
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报 编辑记录解决 1无用