免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: xiaozhu2007
打印 上一主题 下一主题

[C] 求2~2000的所有素数.有足够的内存,要求尽量快 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2012-09-07 11:08 |只看该作者
ytl 发表于 2008-09-22 10:30
既然承认最关键是建表,所以不能用查表法。
2000个数不是关键,因为这只是算法题而已,考的是算法。如 ...

直接拿来用最快

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
32 [报告]
发表于 2012-09-07 11:20 |只看该作者
而且楼上大部分说查表的人都没仔细理解题目,说找到2000以内所有的,他们都是找到一个,题目没回答全。

即使是用查表,只要生成素数表,非素数的没必要放到里面;然后通过二分查找之类的找到素数表内的下标范围,然后取出来才是最终答案。

论坛徽章:
23
双鱼座
日期:2013-08-30 09:25:19辰龙
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16赛季CBA联赛之浙江
日期:2016-03-15 10:51:5415-16赛季CBA联赛之八一
日期:2016-05-31 09:38:3615-16赛季CBA联赛之辽宁
日期:2017-08-31 14:59:2115-16赛季CBA联赛之辽宁
日期:2017-12-06 14:12:3615-16赛季CBA联赛之天津
日期:2019-01-02 15:25:4915-16赛季CBA联赛之深圳
日期:2020-12-06 11:26:21狮子座
日期:2014-05-19 09:16:35技术图书徽章
日期:2014-03-27 13:37:39技术图书徽章
日期:2013-08-30 09:28:52
33 [报告]
发表于 2012-09-07 11:35 |只看该作者
xiaozhu2007 发表于 2008-09-20 20:16
求2~2000的所有素数.有足够的内存,要求尽量快

答案:

楼主,你的答案我也没整明白

论坛徽章:
0
34 [报告]
发表于 2012-09-07 11:43 |只看该作者
回复 32# cokeboL

http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Implementation

他们说的是这个。

   

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
35 [报告]
发表于 2012-09-07 15:09 |只看该作者
回复 34# sacry


    3ks~

论坛徽章:
0
36 [报告]
发表于 2012-09-07 15:26 |只看该作者
传说中的打表。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
37 [报告]
发表于 2012-09-07 15:32 |只看该作者
回复 34# sacry


    看了下介绍,刚好我的代码就用的这个方法,俺是文科,以前没碰到过这,嘿嘿

论坛徽章:
0
38 [报告]
发表于 2012-09-07 22:41 |只看该作者
本帖最后由 su_787910081 于 2012-09-07 22:45 编辑

楼主不是已经有了代码了吗?
他的意思不是说没弄明白那代码是怎么来的吗?
怎么全都自己另外去写了啊.  
楼主的那个算法非常地道啊.  
我做了一些改动.

#include <stdio.h>
#include <assert.h>

static int findvalue[2000] = {2}; // 2是偶数, 但是素数.所以把他直接放进去,提高一下效率
static int ind=1;                        //  这个是下标,  下一个素数放在  findvalue[ind]   里面
void prime(int value);                 //  函数声明   判断  value 是不是素数, 如果是放到数组里

int main()
{
        int  i=3;
        while(i<=2000){
                 prime(i);
                 i  +=  2;
        }

        //将数组里面的素数打印出来, 每10个换一行
        for(i=0;  i<ind;  i++){
                  printf("%4d ",  findvalue);
                  if((i+1)%10  ==  0) {  printf("\n");  }
        }
        return 0;
}

         /************************************************
           *    下面那个函数就是判断传入的参数是否是素数,   
           *    只要这个参数被现在数组里的任一一个素数整除,   
           *    则说明他不是素数;   
           *    反之, 说明他就是素数.   
           *    既然是素数就把它放到数组里.   
           *    ind  是下标, 同时它还记录了这个数组里一共存放了多少个素数.
           ***********************************************/
void   prime( int   value){
          assert( value>2);
          int  i;

          for( i=0;  i<ind;  i++){
                    if(value%findvalue == 0) { return ;}
          }
          findvalue[ind++] = value;
}



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP