Python练习(13)易

问题描述

法国数学家梅森尼对这类形如2 ^ n-1的素数特别感兴趣,做过很多有意义的工作,后人把此类数命名为梅森尼数。 已经证明了,如果2 ^ n-1是素数,则幂指数n必须是素数,然而,反过来并不对,当n是素数时,2 ^ n-1不一定是素数。例如,人们已经找出2 ^ 11-1是一个合数,23可以除尽它,2 ^ 23-1是一个合数,47可以除尽它。
找出指数n在(2,50)中的梅森尼数。

分析

  • 首先构造素数判断函数
    遍历范围内的数,找出素数n
    判断2^n-1 是否是素数,若是,则输出该数

代码

import math
def sushu(n):             
    for k in range(2,int(math.sqrt(n)+1)):
        if n%k==0:
            return False
    return True

def masonNumber(n):
    b=[]
    for i in range(2,n):
        if sushu(i):    #两个判断可以合并: if sushu(i) and sushu(2**i-1):
            if sushu(2**i-1):
                b.append(2**i-1)
    return b
print masonNumber(50)

#结果
[3, 7, 31, 127, 8191, 131071, 524287, 2147483647L]

猜你喜欢

转载自blog.csdn.net/qq_43243022/article/details/82972914