문제

I wrote down simple algorithm for checking if Mersenne number is prime:

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

Generally I don't need to give result parameter when script calls this function however I need it for recursive calls.

So only result need to be initialised for this function with value of 4

I can write some initializing function like:

def is_prime_mers_init(step):
    is_prime_mers(4, step, count_mersenne(step))

But maybe there is some python/general programming pattern to do that in first function?

Edit: For all curious ones :) This is function what implements Lucas-Lehmer test and checks if given Mersenne number is prime http://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test - however I read only mathematic implementation - so this is purely my code solution.

step is number of recursive calls

count_mersenne(step) gives value of some Mersenne number: 2 ** step - 1 however I use some check in count_mersenne(step) because searching for prime Mersenne numbers can be limited to prime step values.

도움이 되었습니까?

해결책

You can assign them dummy default values and then you can decide whether to change them or not, like this

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

Or in one liners

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top