EDUCODER 寻找第n个默尼森数(PYTHON)

EDUCODER 寻找第n个默尼森数(PYTHON)

    • 1.题目
    • 2.代码
    • range函数

1.题目

寻找第n个默尼森数。
代码格式如下:
def prime(num):

def monisen(no):
… …
return xxx

print(monisen(int(input()))) #此处不需要自己输入,只要写这样一条语句即可,主要完成monisen()函数(4分)
经典程序设计问题:找第n个默尼森数。P是素数且M也是素数,并且满足等式M=2** P-1,则称M为默尼森数。例如,P=5,M=2 **P-1=31,5和31都是素数,因此31是默尼森数。
输入格式:按提示用input()函数输入
输出格式:int类型
输入样例:4
输出样例:127

时间限制:500ms内存限制:32000kb
————————————————

2.代码


# coding=utf-8
########## Begin ##########
import math
def prime(num):
    flag = True #判断是否为素数,TRUE就是,FALSE为不是
    for i in range(2,int(math.sqrt(num))+1):#上界可以降低到本身的平方根取整+1,因为如果A能整除代表A能分解为两个因子,而其中一个因子必定小于等于A的平方根,同时取整+1保证根号不是整数时能取到
    
        if num%i == 0:#判断是否整除
            flag = False#整除则为假,不整除不变,为TRUE
            return flag
    return flag


def monisen(no):
    p = 5
    if no == 1:#单独写前两个
        return 3
    elif no == 2:
        return 31#题目好像有错误,第二个莫尼森数应该是7,第三个是31,但是题目要求第二个是31,所以这么写能过检测
    else:
        while no>2:
            if prime(p):
                m = 2 ** p -1#由p找m
                if prime(m):#判断m是否为素数
                    no -= 1#因为要找第no个素数,所以no-1,直到减到零
            p += 1#继续p+1找下一个数字,p=1,2,3,4,5,6....,用prime函数判断是否为素数
        return  m#返回第n个莫尼森数m

print(monisen(int(input())))
########## End ##########


本代码直接就可以在EDUCODER上编译通过,建议把注释删除。

range函数

它的语法:range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。

对于 range() 函数,有几个注意点:(1)它表示的是左闭右开区间;(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;(3)它是不可变的序列类型,可以进行判断元素、查找元素、切片等操作,但不能修改元素;(4)它是可迭代对象,却不是迭代器。

你可能感兴趣的:(python,github,算法)