孪生素数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了孪生素数相关的知识,希望对你有一定的参考价值。
程序地址:http://www.cheemoedu.com/exercise/20
问题描述:
若两个素数之差为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
我的思路:
先求出100以内的素数,上次已经做过了(http://jmbzs.blog.51cto.com/9449309/1790973),
而且一个素数的孪生素数必然是在其左右的,所以判断是否满足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]
以上是关于孪生素数的主要内容,如果未能解决你的问题,请参考以下文章