寻找第n个默尼森数。
代码格式如下:
def prime(num):
...
def monisen(no):
… …
return xxx
print monisen(input()) #此处不需要自己输入,只要写这样一条语句即可,主要完成monisen()函数
# print(monisen(int(input()))) in Python 3.x
(5分)
题目内容:找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数。例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数。
输入格式:用input()函数输入,注意如果Python 3中此函数的返回类型
输出格式:int类型
输入样例:4
输出样例:127
时间限制:500ms
内存限制:32000kb
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 01 18:32:41 2016
@author: dukeyu
"""
from math import sqrt
# 缓存默尼森数
cacheMonisen = []
# 缓存素数
cachePrime = []
# 素数范围,搜索更多的素数
minNumber = 2
maxNumber = 100
def isPrime(x):
'''判断是不是素数'''
k = int(sqrt(x))
for i in range(2, k + 1):
if x % i == 0:
return False
return True
def addCachePrime():
'''增加素数缓存'''
for i in range(minNumber, maxNumber):
if isPrime(i) and (i not in cachePrime):
cachePrime.append(i)
def monisen(no):
'''求解第N个默尼森数'''
# 初始化素数缓存
addCachePrime()
if no <= len(cacheMonisen):
return cacheMonisen[no - 1]
for i in cachePrime:
# M和P均为素数
p = i
m = pow(2, p) - 1
if isPrime(p) and isPrime(m):
cacheMonisen.append(m)
if no == len(cacheMonisen):
break
if no == len(cacheMonisen):
return cacheMonisen[-1]
else:
# 素数范围不足,须增加素数,继续查找
global minNumber, maxNumber
minNumber, maxNumber = maxNumber, maxNumber * 2
addCachePrime()
return monisen(no)
print monisen(input())
寻找第n个默尼森数。
代码格式如下:
def prime(num):
...
def monisen(no):
… …
return xxx
print monisen(input()) #此处不需要自己输入,只要写这样一条语句即可,主要完成monisen()函数
# print(monisen(int(input()))) in Python 3.x
(5分)
题目内容:找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数。例如,P=5,M=2**P-1=31,5和31都是素数,因此31是默尼森数。
输入格式:用input()函数输入,注意如果Python 3中此函数的返回类型
输出格式:int类型
输入样例:4
输出样例:127
时间限制:500ms
内存限制:32000kb
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 01 18:32:41 2016
@author: dukeyu
"""
from math import sqrt
# 缓存默尼森数
cacheMonisen = []
# 缓存素数
cachePrime = []
# 素数范围,搜索更多的素数
minNumber = 2
maxNumber = 100
def isPrime(x):
'''判断是不是素数'''
k = int(sqrt(x))
for i in range(2, k + 1):
if x % i == 0:
return False
return True
def addCachePrime():
'''增加素数缓存'''
for i in range(minNumber, maxNumber):
if isPrime(i) and (i not in cachePrime):
cachePrime.append(i)
def monisen(no):
'''求解第N个默尼森数'''
# 初始化素数缓存
addCachePrime()
if no <= len(cacheMonisen):
return cacheMonisen[no - 1]
for i in cachePrime:
# M和P均为素数
p = i
m = pow(2, p) - 1
if isPrime(p) and isPrime(m):
cacheMonisen.append(m)
if no == len(cacheMonisen):
break
if no == len(cacheMonisen):
return cacheMonisen[-1]
else:
# 素数范围不足,须增加素数,继续查找
global minNumber, maxNumber
minNumber, maxNumber = maxNumber, maxNumber * 2
addCachePrime()
return monisen(no)
print monisen(input())