我写下了检查梅森数是否素数的简单算法:
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
参数,但递归调用需要它。
因此,对于值为4的函数,只需要初始化result
我可以写一些初始化函数,比如:
def is_prime_mers_init(step):
is_prime_mers(4, step, count_mersenne(step))
但也许在第一个函数中有一些python/general编程模式可以做到这一点?
编辑:对于所有好奇的人:)这是实现Lucas Lehmer检验并检查给定的Mersenne数是否为素数的函数http://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test-然而,我只阅读数学实现-所以这纯粹是我的代码解决方案。
step
是的递归调用数
count_mersenne(step)
给出了一些梅森数的值:2 ** step - 1
,但我在count_mersenne(step)
中使用了一些检查,因为搜索素数梅森数可能仅限于素数step
值。
您可以为它们分配伪默认值,然后您可以决定是否更改它们,就像这个
def is_prime_mers(step, result = None, modulo = None):
if result is None:
result = 4 # Default value
if modulo is None:
modulo = count_mersenne(step) # Default value
或者在一行中
def is_prime_mers(step, result = None, modulo = None):
result = 4 if result is None else result
modulo = count_mersenne(step) if modulo is None else modulo