计算n以内的质数表

1.设计一个时间复杂度低于O(n^2)的算法,计算n以内的质数表,并且计算你的算法的复杂度.

注:本文最初发表于汕头大学郁金香bbs.


发信人: guomin (CS03.working for tomorrow), 信区: Program
标  题: Re: 算法考试样题
发信站: 郁金香BBS站 (2006年01月12日15:46:20 星期四), 站内信件

考完试,无聊..练习打字.

第一题我的解法,不知道对错,错了麻烦大家提出来^_^;我考虑尽量做到最优.

(1)建立一个可变长度的数组P[i](为叙述方便)用来保存质数表;
(2)程序:
if(n<=1) exit(0);                            //如果n<=1,退出程序
else if(n>=2) P[0]=2;                   //如果n>=2,将2添加进质数表
else if(n<3) 打印质数表;            //如果n==2,实际上只有一个质数:2,输出质数表
else {                                            //如果n>=3
    P[1]=3;                                      //将3添加进质数表

    for(int k=5;k<=n;)                    //从5开始验证,如果n=3或者4,不进入循环
    {
        limit=sqrt(k)+1;                 //素数验证上界,只需要整除到根号n就可以了

        for(int j=1;j<i;j++)              //从质数表中整除,如果n整除尽前面所有的质数还不能整除,则添加进质数表
        {                     //j=1开始,因为没有偶数,不用考虑第一个P[0]=2
            if(k%P[j]==0) goto onto;    //如果能整除小于k的质数表里面的质数之一,就转到onto处理
        }
        P[i+1]=k;                       //整除不了,添加进质数表
onto:k+=2;                        //因为奇数才需要验证,偶数不用考虑(除2外)
        if(k%3==0) k+=2;                //能被3整除的不用考虑
    }
}
(3)打印质数表P[i]

※ 来源:·郁金香BBS站 bbs.stu.edu.cn·[FROM: 郁金香BBS站]                                                              

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值