| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2103 人关注过本帖
标题:素数统计
取消只看楼主 加入收藏
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
结帖率:97.78%
收藏
已结贴  问题点数:20 回复次数:5 
素数统计
题目如下:
【问题描述】

    这题意思非常简单,给你一个正整数n,你需要求出有多少个质数小于等于n。

【输入】

    输入文件仅一行,包括一个正整数n。

【输出】

    仅一行,一个整数表示有多少个质数小于等于n。
 
    输出后请注意换行


【输入输出样例】

prime.in
100

prime.out
25


【数据规模】
30%的数据满足:n <= 1000。
50%的数据满足:n <= 200000。
100%的数据满足:1 <= n <= 2000000。

【时间要求】
1s


下面是我写的代码, 感觉效率还能够提高..
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i, j, n;
    int count = 1;            /*直接包括了2这个素数, 能够减少一半循环*/
    int *prime;
    scanf("%d", &n);
    if(n < 1 || n > 2000000){        /*这一段代码在题目中不需要,, 但是作为程序
                                                      的话还是要考虑是否健壮, 不然calloc将会出错*/
        exit(-1);
    }
    if(n < 2){        /*如果是1的话..*/
        count--;
    }
    prime = calloc(sizeof(int), n);
    for(i = 3; i <= n; i += 2){        /*偶数必定不是素数..*/
        if(prime[i] == 1){
            continue;
        }
        count++;
        for(j = 2 * i; j <= n; j += i){
            prime[j] = 1;
        }
    }
    printf("%d\n", count);
    return 0;
}
其实有一种算法肯定是最快的(无与伦比), 就是把1~2000000之间的所有素数作为一个数组保存起来, 然后...(之间省略..) 不过这种算法我感觉不好...

总之我感觉我的代码还有提升的价值, 也想看看各位的代码...
搜索更多相关主题的帖子: 统计 素数 
2010-02-19 23:56
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 5楼 Devil_W
能详细说明一下吗~?
Ps : 俺现在初中文凭...

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2010-02-20 12:39
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 7楼 Devil_W
6k + 3 呢~?
6k + 2呢`? (k = 0时)``
  我硬是没写出来

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2010-02-20 16:41
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 11楼 卧龙孔明
呵呵, 嗯,, 哦哦.. 这么一回事儿..
 这会快不少啊`

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2010-02-20 21:57
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 13楼 Devil_W
汗,,, 你当年学的时候没做过这种"没技术含量"的题目`?~
 技术含量是相对而言的, 饿..
大学生的技术含量就是各种各样的大型方程,, 复杂的图形,,
  小学生的技术含量就是加减乘除..

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2010-02-20 22:04
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 9楼 Devil_W
不是啊,,
当k等于0的时候
6k+2和6k+3 都是素数.

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2010-02-21 11:46
快速回复:素数统计
数据加载中...
 
   



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

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