使用Loop查找Brute Force Prime数字

时间:2014-10-01 22:22:04

标签: python loops

我正在尝试编写这个使用循环的程序,它找到了使用Mersenne的Br​​ute Force Prime Nu床。方向如下。

  
    
      
        

素数是一个不能被任何其他数字整除的数字(除了,通常为1)。确定数字是否是素数的所有已知方法都依赖于强力,即对可能性的详尽测试。编写一个检查数字是否为素数的例程。检查它是否均匀,如果没有,检查所有奇数到数字的平方根(你明白为什么平方根足够吗?)。如果数字不是素数,请告诉用户一个因素。

                 

对于你的演示,你将使用Mersenne 67,它是2到67次幂减1(见问题1-4-A):147573952589676412927 [147,573,952,589,676,412,927]。 1644年,马林·梅森(Marin Mersenne)推测这个数字是素数。直到1903年F.N.科尔解决了这个猜想,他在美国数学学会的会议上得到了起立鼓掌。决议是什么? (即Mersenne 67 prime?)使用您的程序回答这个问题;你的程序可能会运行大约2.5分钟,这是它最初用来解决问题的两个半世纪的进步。

      
    
  

这就是我到目前为止所做的,但它似乎没有在我可以验证我的答案的地方运行。任何投入都会非常感激。提前谢谢。

def me():
    N = int(input("What is the Value of N?="))
    Mersenne=(2**N)-1
    print(format(Mersenne,',d'))

me()

如何在上面包含上面的Merseene代码?

'''
This function takes a single argument n and returns either
1) a factor of n     if n is not prime
2) False             if n is prime
'''
def is_prime(n):
# "Check if it's even..."
if is_even(n):
    # (do something)
else:
    # "... and if not, check all the odd numbers up to the square root of the number"
    for f in <something that generates odd numbers>:
        if is_factor(f,n):
            # (do something)

# Default case:
#    n is odd, and 
#    none of the odd numbers up to sqrt(n) are factors of n
# (do something)


def get_n():
n = raw_input("What is the value of n? ")
return ((2 ** 67)-1) if n == 'm' else int(n)


n = get_n()  
p = is_prime(n)

if p:
  print("%d is not prime (e.g. factor=%d)" % (n, p))
else:
  print("%d is prime")

2 个答案:

答案 0 :(得分:0)

首先,您需要将问题分解为多个部分,即启动它,要求您的程序能够确定数字是否均匀。这个片段的确如此:

def isEven(input):
    return input % 2 == 0

这个函数的作用是将输入模2以安全地确定它是否是偶数。

>>> isEven(10)
True
>>> isEven(9)
False
>>> isEven(144)
True
>>> isEven(67890)
True
>>> isEven(67891)
False

希望这能让你走上正轨:)

答案 1 :(得分:0)

这里有一些可能有或没有帮助的伪代码

'''
This function takes a single argument n and returns either
    1) a factor of n     if n is not prime
    2) False             if n is prime
'''
def is_prime(n):
    # "Check if it's even..."
    if is_even(n):
        # (do something)
    else:
        # "... and if not, check all the odd numbers up to the square root of the number"
        for f in <something that generates odd numbers>:
            if is_factor(f,n):
                # (do something)

    # Default case:
    #    n is odd, and 
    #    none of the odd numbers up to sqrt(n) are factors of n
    # (do something)


def get_n():
    n = raw_input("What is the value of n? ")
    return ((2 ** 67)-1) if n == 'm' else int(n)


n = get_n()
p = is_prime(n)

if p:
    print("%d is not prime (e.g. factor=%d)" % (n, p))
else:
    print("%d is prime")

请注意is_evenis_factor不是真正的函数,您必须自己实现它们或将它们更改为等效的操作。此外,<something that generates odd numbers>也不是真的,同样的事情。

此外,get_n()是一个小函数,它会提示用户输入一个整数并返回它。如果用户输入m(单个小写字符),则返回Mersenne 67(=(2 ^ 67) - 1)