📅  最后修改于: 2023-12-03 15:41:05.714000             🧑  作者: Mango
本程序用于查找带有梅森编号(p = 2^n -1)的素数,并计算它们的乘积。
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
def is_mersenne_prime(p):
if not is_prime(p):
return False
n = int(p**0.5)
return 2**n - 1 == p
def calc_mersenne_primes_product(n):
product = 1
for i in range(2, n+1):
p = 2**i - 1
if is_mersenne_prime(p):
product *= p
return product
运行 calc_mersenne_primes_product 函数,传入一个整数作为最大范围参数,即可得到对应范围内梅森素数的乘积。
calc_mersenne_primes_product(100)
本程序使用试除法判断素数,时间复杂度为 $O(\sqrt{n})$;
对于一个 p,判定是否为梅森素数的时间复杂度为 $O(\sqrt{p})$;
而本程序循环的次数为 $O(n)$,故总时间复杂度为 $O(n\sqrt{n})$,在 $n$ 较小的时候,程序运行较快,但随着 $n$ 的增大,程序运行时间会变得较长,不适合用于大规模数据的处理。