Chinaunix首页 | 论坛 | 博客
  • 博客访问: 454585
  • 博文数量: 97
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 1091
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 17:05
个人简介

专注于大规模运维场景运维工具解决方案。欢迎有这方面兴趣的朋友跟我联系。

文章分类

全部博文(97)

文章存档

2014年(12)

2013年(25)

2012年(60)

我的朋友

分类: Python/Ruby

2012-09-05 08:38:34

编程题目:
1、计算1000万、1亿内素数个数?
我的第一个算法:

点击(此处)折叠或打开

  1. def isprime(n):
  2.     """Return true if n is prime and False otherwise"""
  3.     if not isinstance(n, int):
  4.         raise TypeError("argument passed to is_prime is not of int type")
  5.     if n < 2:
  6.         return False
  7.     if n == 2:
  8.         return True
  9.     max = int(math.ceil(math.sqrt(n)))
  10.     i = 2
  11.     while i <= max:
  12.         if n%i == 0:
  13.             return False
  14.         i += 1
  15.     return True

  16. def sum_primes(n):
  17.     return len([x for x in xrange(2, n) if isprime(x)]
在数量比较小的时候这个算法还能跑跑,但是如果是亿级的时候要循环这么多次去除显然有点过慢。就一个数这么慢那要算一个区间的数据就更慢。所以需要对算法进行调优。
介绍:拉宾米勒测试算法

阅读(470) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

Bean_lee2012-09-06 16:08:49

这个不难,记不得那本书讲过了,淘汰法。从2 开始,2*n的滚蛋,然后从3开始倍成,三的倍数滚蛋,从4开始,4的倍数滚蛋,最后到10000(以1亿为例),10000的倍数滚蛋。 OK,剩下的就是素数了。

数据结构最好用链表组织下,前面滚蛋的数字就不要再判断了。