标题:怎么用筛选法输出100之内的素数?
只看楼主
doofymark
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2010-10-6
得分:0 
回复 8楼 Tveiker
我明白了...只有b[i]==0的时候才会输出...所以a[i]只能输出一次...
谢谢啦!
2010-10-20 06:23
doofymark
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2010-10-6
得分:0 
回复 9楼 pangding
大师啊...你这东西颇为有些深奥啊...小弟先收着...
对不起啊...实在是有点不知道这个玩意在说什么的感觉...
2010-10-20 06:25
ybjx1987
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:26
专家分:175
注 册:2008-11-26
得分:0 
int i,j;
bool f;   
for(i=3;i<100;i++)
{   
    f=true;
    for(j=2;j<sqr(i)+1;j++)
    {   
        if(i%j==0)
        {
            f=false;   
            break;
        }
    }
    if(f)
    {
        cout<<i<<"  ";
    }
}
感觉这么写会运算快一些,因为少了很多不必要的过程。
2010-10-20 13:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
回复 12楼 doofymark
呵呵,这是我的一个同学在我教了他这个算法之后写的。

算法是把所有素数的倍数从数组里删去。
数组开始的时候里面全是0,然后 i = 2 是素数。j = 2 * i 是 4,4 的地方被标记成 1,就是合数。之后 j += i,就是让 j 一直取 2i, 3i, 4i, .... 这些都是 i 的倍数,因此是合数。然后 i 往后找第一个是 0 的值,因为这个值不是比它小的所有素数的倍数,因此也是素数,然后 j 再把这个数的倍数划去。最后表里是 0 的数,就是素数。打印出来就行了。

刚才看才发现,他申请完内存之后都没试试是不是成功就用了那块内存。这不是个好习惯,大家可以在 calloc 的下一行加一个
if (!flag) { ...... }
访照文件打开下面的語句处理一下。
2010-10-20 22:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-323309-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.070615 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved