永发信息网

C语言 用筛法求1-1000之间的素数

答案:2  悬赏:10  手机版
解决时间 2021-01-21 12:49
C语言 用筛法求1-1000之间的素数
最佳答案
筛选法的规律:(以1~1000内的素数少选为例)
我们知道素数的定义:只能被1和他本身整除的是素数,那这样看的话,只要有一个既不是1又不是这个数本身的数把这个数整除了,就可以说明这个数不是素数了。例如 5是素数,因为5只能被5和1整除,6不是素数,,因为6除了能被1和6整除,还能被2和3整除。试想一下,我们要判断6是不是素数,需不需要循环到6的时候才进行判断呢,不需要,因为2和3都是他的因子,我们在循环到2的时候,找到2的所有倍数,如4,6,8,10,12等等,这些数都至少有2这个因子,因此可以判定它们都不是素数了。而由于4是2的倍数,在循环到2的时候已经判定4不是素数了,所以我们不需要在挖掉4的倍数了,直接跳过4,来到5,挖掉5的所有倍数,然后是6,6在值钱是2的倍数被挖掉了,所以跳过6,来到7.....一直循环到最后一个数字为止,这个时候就是上面7步中说的,剩下没有被挖掉的(挖掉的含义就是把这个数置0)也就是非0的数字就是素数了。
不知道我说的你能不能听懂。希望对你有帮助吧。
#include
int main()
{
int prime[1002],i,j;
for(i=2;i<1000;i++)
prime[i]=i;//将数组填满1~1000的数字,由于1不是素数,因此我们跳过1,从2开始填
for(i=1;i<1000;i++)
{
if(prime[i]!=0)//是 否已经置0,像4,6,8,10,12等这些数字,在挖2的倍数的时候已经被置零了,所以我们跳过这些数字
for(j=2;i*j<1000;j++)
prime[i*j]=0;//挖掉
}
for(i=1;i<1000;i++)
if(prime[i]!=0)
printf("%d ",prime[i]);//最后非0的数字输出
return 0;
}追问输出的是一串0啊- -
而且prime[i*j]=0 这个不会给所有的都赋值么?追答怎么会呢,我运行正常才给你的,prime[i*j]=0是把i的倍数置0,对于不是i的倍数的整数不会被置0 的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
栽花用沙土好还是黏土好呢?
谁努力寻找幸福,幸福就会降临到谁的身边
为何就茅台酒不会倒闭?其他酒厂会倒闭?难道
诛仙3一套加九装备自己练需要花多少钱
介绍几部好看的动漫,最好在24集左右已经完结
3x十15=4x十4怎么算
77英女王港币值人民币多少钱啊
一岁四个月了,同月的宝宝都有多高多重啦
为什么函数f(z)=rez在复平面上处处可微是错误
秋天成熟的水果带句子有哪些
如果天黑之前来得及,我要挖了你的眼睛是哪首
坐动车2米长的东西可以带吗
鹏程快运(益都街道大华摩配市场恒泰物流园12
将就的情侣网名是什么(除了不将就)
蛙跳过篮球全场,一个来回算一组,一天十组,
推荐资讯
买车是买大众高尔夫好一点还是尼桑逍客好一点
幸福是“临行密密缝,意恐迟迟归”的牵挂。
爱玉冻可以做什么饮料
猜对没有
生胶和长胶哪个更不易吃发球?
为什么说中国古典园林“本于自然,高于自
人类生活需要能量,下列能量是通过化学变化产
新房保洁开荒费用是多少
X平方-|X|-2=0
加强环境教育宣传有什么意义?
男神经,女神经,是什么意思啊
股票中说的“盘振”是什么意思?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?