python求梅森尼数_梅森尼数 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...

问题描述:

法国数学家梅森尼对这类形如2^n-1的素数特别感兴趣,做过很多有意义的工作,后人把此类数命名为梅森尼数。

已经证明了,如果2^n-1是素数,则幂指数n必须是素数,然而,反过来并不对,当n是素数时,2^n-1不一定是素数。例如,人们已经找出2^11-1是一个合数,23可以除尽它,2^23-1是一个合数,47可以除尽它。

编程找出指数n在(2,50)中的梅森尼数。

我的代码:

import math

def prime(m):

count=0

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

if m%i==0:

count=1

if count==0:

return True

else:

return False

for j in range(2,50):

if prime(2**j-1) and prime(j):

print j,2**j-1

结果:

幂   梅森尼数

2     3

3     7

5     31

7     127

13    8191

17    131071

19    524287

31    2147483647

我的思路:

过程很简单,就是定义一个函数用来判断传入的参数是否为素数,然后遍历2到50之间的数,输出同时满足指数是素数,对应的2^n-1也是素数的数即可;

示例代码:

import math

def isPrimeNumber(num):

i = 2

x = math.sqrt(num)

while i <= x:

if num%i == 0:

return False

i += 1

return True

def masonNumber(num):

arr = []

for i in xrange(2, num + 1):

if isPrimeNumber(i) and isPrimeNumber(2**i - 1):

arr.append(2**i - 1)

return arr

print masonNumber(50)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值