python查找孪生素数_孪生素数-随心随性无为而为-51CTO博客

问题描述:

若两个素数之差为2,则这两个素数就是孪生素数。

编写程序找出1~100之间的所有孪生素数。

我的代码:import math

def prime(n):

count=0

for  i in range(2,int(math.sqrt(n))+1):

if n%i==0:

count=1

i+=1

if count==1:

return None

else:

return True

a=[]

for j in range(2,100):

if prime(j)==True:

a.append(j)

for k in range(len(a)-1):

if a[k]+2==a[k+1]:

print a[k],a[k+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]

3 5

5 7

11 13

17 19

29 31

41 43

59 61

71 73

我的思路:

而且一个素数的孪生素数必然是在其左右的,所以判断是否满足a[k]+2==a[k+1]关系,满足的两素数即为孪生素数,注意,此时的循环范围为len(a)-1,如果是a[k-1]+2=a[k]的话,那么for循环就应为range(1,len(a));

示例代码:#筛法找素数:

# 1. 建立一张表,用True,False标识一个数是否是素数。

# 2. 找到一个素数p,然后把p的倍数都标记成非素数。

# 3. 查表检测p + 1, 如果非素数检测下一个, 是素数执行1的操作

pt = [True] * 100

res = []

for p in range(2, 100):

if not pt[p]: continue

res.append(p)

for i in range(p * p, 100, p):

pt[i] = False

for i in range(1, len(res)):

if res[i] - res[i-1] == 2:

print res[i-1], res[i]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值