免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2453 | 回复: 1
打印 上一主题 下一主题

python计算孪生素数 [复制链接]

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-21 13:27 |只看该作者 |倒序浏览
本帖最后由 给个理由先 于 2013-06-21 21:37 编辑

python初学者代码


  1. import math

  2. def IsPrime(n):
  3.         '''calculate a prime'''
  4.         if n<2:
  5.                 return False
  6.         elif n==2 or n==3:
  7.                 return True
  8.         elif n%2==0:
  9.                 return (2, n/2)

  10.         for i in range(3, 1+n/3, 2):
  11.             if n%i==0: return (i, n/i)

  12.         return True

  13. def Decompose(n):
  14.         '''decompose/factorization to primes'''
  15.         if n<=3:
  16.                 return [n]

  17.         factors = []
  18.         rest = n
  19.         while rest>2:
  20.                 mark = False
  21.                 i=2
  22.                 while i<(1+rest/2):
  23.                         if rest%i==0:
  24.                                 factors.append(i)
  25.                                 rest=rest/i
  26.                                 mark=True
  27.                                 break
  28.                         i+=1
  29.                 if not mark: break
  30.         factors.append(rest)
  31.         factors.sort()
  32.         return factors

  33. def PrimeList(bounding=1000):
  34.         '''all primes in [1~bounding)'''
  35.         # odds between [3,bounding), cutting all number that can be decomposed!
  36.         mid = round(math.sqrt(bounding)+1)
  37.         number = range(3, bounding, 2)
  38.         for i in number:
  39.                 if i<>0:
  40.                         for j in range(i, 1+bounding/i, 2):
  41.                                 number[(i*j>>1)-1]=0
  42.                 elif i>mid:
  43.                         break
  44.         return [2]+[i for i in number if i<>0]

  45. def PairPrime(bounding=1000):
  46.         '''the pair prime in [1~bounding)'''
  47.         pp=PrimeList(bounding)
  48.         return [(p[i],p[i+1]) for i in range(len(pp)-1) if p[i]+2==p[i+1]]

  49. if __name__=='__main__':
  50.         p=PrimeList(100)
  51.         print len([i for i in p if IsPrime(i)==True])==len(p), p
  52.         np=set(range(100))-set(p)
  53.         print len([i for i in np if IsPrime(i)<>True])==len(np), np
  54.         pp=PairPrime(100)
  55.         print len(pp), pp
复制代码

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
2 [报告]
发表于 2013-06-21 13:38 |只看该作者
IsPrime(n): #判断一个数是否素数,素数返回True,非素数返回第一个分解因数
Decompose(n): #分解质因数
PrimeList(bounding=1000): #计算给定范围的所有素数,使用挖空法,要一次建立一个足够大的数组,所以有内存限制,我的机器上只能到1亿,20秒。
PairPrime(bounding=1000): #计算给定范围的所有孪生素数(距离为2)

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP