一、素数的概念
素数指的是只能被1和它自身整除的整数。
判定一个整数n是否为素数的关键,就是要判定整数n能否能被除1 和它自身以外的其他任何整数所整除,若都不能整除,则n为素数。
我们可以自定义一个函数isPrime,如果参数n是素数,则返回True,否则返回False
def isPrime(n):
if n==2 or n==3:
return True
for i in range(2,n):
if n%i==0:
return False
return True
二、哥德巴赫猜想
任何不小于4的正偶数m都能够分解为两个素数n1和n2之和
三、可逆素数
可逆素数是指一个素数将其各位数字的顺序倒过来构成的反序数也 是素数。
请从小到大输出所有4位数的可逆素数。
def rev(n):
newNum=0
while n>0:
g=n%10
n=n//10
newNum=newNum*10+g
return newNum
for i in range(1000,10000):
if isPrime(i) and isPrime(rev(i)):
print(i," is 反序素数")
四、回文素数
所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值 都相同且n为素数,则称整数n为回文素数。
五、孪生素数
所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距 离已经近得不能再近了,如同孪生兄弟一样,故将这一对素数称为孪生素数。
显然,最小的一对孪生素数是(1,3)。我们可以写出3~100以内的孪 生素数,一共有8对,分别是(3,5),(5,7),(11,13),(17,19),(29,31), (41,43),(59,61)和(71,73)。随着数字的增大,孪生素数的分布也越来越 稀疏,人工寻找孪生素数变得非常困难。
六、梅森素数
梅森数(Mersenne Prime)指的是形如2n-1的正整数,其中指数n是 素数,记为Mn。如果一个梅森数是素数,则称其为梅森素数。例如22-1 =3、23-1=7都是梅森素数。
当n=2、3、5、7时,Mn都是素数,但n=11时,Mn=M11=211- 1=2047=23×89,显然不是梅森素数。
1722年,瑞士数学大师欧拉证明了231-1=2147483647是一个素数, 它共有10位数,成为当时世界上已知的最大素数。 迄今为止,人们仅发现了47个梅森素数。
梅森素数历来都是数论研 究中的一项重要内容,也是当今科学探索中的热点和难点问题。 了解了梅森素数后,现在来看本节要解决的编程问题。 试求出指数n<20的所有梅森素数。