我写下了简单的算法来检查Mersenne数是否为素数:
def is_prime_mers(result, step, modulo):
if result != 0:
if step == 0:
return False
result = result ** 2 - 2
if result >= modulo:
result %= modulo
return is_prime_mers(result, step - 1, modulo)
return True
通常我不需要在脚本调用此函数时给出result
参数,但我需要它来进行递归调用。
因此,只有result
需要为此函数初始化,值 4
我可以编写一些初始化函数,如:
def is_prime_mers_init(step):
is_prime_mers(4, step, cunt_mersenne(step))
但也许在第一个函数中有一些python /通用编程模式可以做到这一点?
编辑:对于所有好奇的人:) 这是实现Lucas-Lehmer测试的函数,并检查给定的Mersenne数是否是素数http://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test - 但是我只读数学实现 - 所以这纯粹是我的代码解析。
step
是递归调用的次数
cunt_mersenne(step)
给出了一些梅森数的值:2 ** step - 1
但是我在cunt_mersenne(step)
中使用了一些检查,因为搜索素数梅森数可以限制为素数step
。
答案 0 :(得分:2)
您可以为它们指定虚拟默认值,然后您可以决定是否更改它们,例如
def is_prime_mers(step, result = None, modulo = None):
if result is None:
result = 4 # Default value
if modulo is None:
modulo = cunt_mersenne(step) # Default value
或在一个衬里
def is_prime_mers(step, result = None, modulo = None):
result = 4 if result is None else result
modulo = cunt_mersenne(step) if modulo is None else modulo