锁定老帖子 主题:会求100的质数,给8000
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-10
最后修改:2011-04-10
学python,正好练下手,也花了好几分钟吧,30秒还是太短了点哦 求100以内的质数: def isPrime(num): # all numbers can be divided by 1, so begins with 2 i = 2 isPrime = True while(i*i <= num): # can be divided by i, so is not prime if(num % i == 0): isPrime = False break else: i += 1 return isPrime print( [ i for i in range(1, 100) if isPrime(i)] ) 结果: [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-11
最后修改:2011-04-11
我也凑个热闹,lz严格来说,你求的是1-99的素数,因为range取不到stop那个数
def isPrime(n): flag = True for i in xrange(2,n-1): if not n%i: flag = False break return flag print([i for i in xrange(1,101) if isPrime(i)]) |
|
返回顶楼 | |
发表时间:2011-04-11
from math import sqrt
result = [ i for i in range(2, 100) if 0 not in [ i% d for d in range(2, int(sqrt(i))+1)] ] print result |
|
返回顶楼 | |
发表时间:2011-04-12
晨曦0911 写道 from math import sqrt
result = [ i for i in range(2, 100) if 0 not in [ i% d for d in range(2, int(sqrt(i))+1)] ] print result 不错 |
|
返回顶楼 | |
发表时间:2011-04-12
jsj_064 写道 晨曦0911 写道 from math import sqrt
result = [ i for i in range(2, 100) if 0 not in [ i% d for d in range(2, int(sqrt(i))+1)] ] print result 不错 exception: 引入math模块增加了依赖;sqrt速度没i*i快 |
|
返回顶楼 | |
发表时间:2011-04-14
6N+-1法:num=50000,时间:50ms
private static void prime2(int num) { long start = System.currentTimeMillis(); for (int n = 2; n <= 3; n++) { System.out.print(n + " "); } label1: for (int n = 1;; n++) { label2: for (int m = 0; m <= 1; m++) { int tmp = 2 * (3 * n + m) - 1; if (tmp > num) break label1; for (int k = 2; k * k <= tmp; k++) if (tmp % k == 0) if (m == 0) continue label2; else continue label1; System.out.print(tmp + " "); } } System.out.println(); System.out.print("时间:"); long end = System.currentTimeMillis(); System.out.println(end - start); } |
|
返回顶楼 | |
发表时间:2011-04-14
feitian124 写道 呵呵,不知道这个哥们说的是真是假,http://www.iteye.com/topic/996006?page=2
学python,正好练下手,也花了好几分钟吧,30秒还是太短了点哦 求100以内的质数: def isPrime(num): # all numbers can be divided by 1, so begins with 2 i = 2 isPrime = True while(i*i <= num): # can be divided by i, so is not prime if(num % i == 0): isPrime = False break else: i += 1 return isPrime print( [ i for i in range(1, 100) if isPrime(i)] ) 结果: [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 大哥,1是质数吗? |
|
返回顶楼 | |
发表时间:2011-04-14
这哥们数学没学好
|
|
返回顶楼 | |
发表时间:2011-04-14
最后修改:2011-04-14
在数学上,1既不是质数也不是和数!
|
|
返回顶楼 | |
发表时间:2011-04-14
最后修改:2011-04-14
sdvc 写道 这哥们数学没学好
这哥们一针见血,遥想当年,如果不是数学拉了后腿,我也是高考上600的人了。 发帖前,我确实有想了下是否要做下边界检查,确认下1是不是素数之类,然后不知道什么原因,懒惰,无所谓,总之就最终没有做。这或许就是我平庸的原因了,因为从这个帖子也可以看出,你有缺陷,就必然有人会提出来,就很可能有人会做的更好;而只是比较好,甚至第二,第三名的那个人,通常也比最好那个人成就上差很多。 所以我接受批评,并且改正。 def isPrime(num): # 质数必须是自然数,且1不是质数也不是合数 if(num <= 1): return False # 只需遍历至num的平方根 i = 2 while(i*i <= num): if(num % i == 0): return False break else: i += 1 return True print( [ i for i in range(1, 101) if isPrime(i)] ) |
|
返回顶楼 | |