永发信息网

c语言 10000以内的质数

答案:4  悬赏:70  手机版
解决时间 2021-05-07 09:59
  • 提问者网友:浩歌待明月
  • 2021-05-06 14:10

输出10000万以内的所有素数(也称质数),要求每行输出一个素数

我自己写的这样的

#include<stdio.h>
void main()
{
int a,b;
for(a=2;a<=10000;a++)
{
for(b=1;b<=2/a;b++)
{
if(a%b==0) break;
}
if (a%b!=0) printf("%d\n",a);
printf("\n");
}
}

哪里有问题啊??

最佳答案
  • 五星知识达人网友:痴妹与他
  • 2021-05-06 15:39

告诉你吧,,


错误:for(b=1;b<=2/a;b++) 应该改成 for(b=1;b<=a/2;b++)



首先你的程序算法就是有问题,判断素数的方法是这样:一个数除了能被1和它本身整除之外,不能被其他的数整除。。。



所以程序可以这样写:



#include <stdio.h>
#include <math.h> //调用C中库函数的头文件
void main()
{
int i,m,n,count=0;
for(m=2;m<=10000;m++)
{n=sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0) break;
if(i>n)
{printf("%6d",m);
count++;
if(count%10==0) printf("\n"); //当一行满10个的时候就换行
}
}
printf("\n");
}



由于每行输出一个不好看结果,,我就调成了每行输出10个






全部回答
  • 1楼网友:迷人又混蛋
  • 2021-05-06 17:36
其实,你最多只有遍历到sqrt(a)就可以 了。。。 另外,你也可以利用质数表来完成,分别将某数的倍数从表中删除,表中剩下的,即是质数。
  • 2楼网友:低音帝王
  • 2021-05-06 17:07
for(b=1;b<=a/2;b++)
  • 3楼网友:污到你湿
  • 2021-05-06 15:51
帮你修改如下 #include<stdio.h> void main() { int a,b; for(a=1;a<=10000;a++) { for(b=2;b<a;b++) { if(a%b==0) break; } if (a==b) printf("%d ",a); } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯