2014-10-02 35 views
0

我想写这个程序,使用循环它发现蛮力素数使用梅森。方向如下。使用循环使用梅森编号(Python)查找蛮力素数(为什么不是我的代码工作?)

素数是一个数字,是不整除任何其他数量(除,平凡,1)。所有已知的确定数字是否为质数的方法都依赖于强力,即对可能性进行彻底测试。编写一个检查数字是否为素数的例程。检查它是否均匀,如果不是,检查所有奇数直到数字的平方根(你知道为什么平方根足够了吗?)。如果数字不是素数,告诉用户一个因素。

对于您的演示,您将使用Mersenne 67,它是2到67次方减1(参见问题1-4-A):147573952589676412927 [147,573,952,589,676,412,927]。在1644年,马林梅森认为这个数字是主要的。直到1903年,F.N.科尔解决了这个猜想,为此他在美国数学学会的会议上得到了热烈的掌声。决议是什么? (即Mersenne 67 prime?)使用你的程序来回答这个问题;你的程序可能会运行大约2分半钟,相当于它最初用来解决问题的2个半世纪的时间。

这是什么什么,我有这么远,但它似乎并没有跑,我可以确认我的答案。任何输入将不胜感激。先谢谢你。

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

me() 


def is_prime(n): 

if is_even(n): 

else: 

    for f in <something that generates odd numbers>: 
     if is_factor(f,n): 


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") 
+0

问题寻求帮助调试(“为什么不是这个代码的工作?”)必须包括所期望的行为,一个特定的问题或错误,并重现它在问题本身所需要的最短的代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – msw 2014-10-02 00:43:58

+0

只是改变了它。如果可以的话请帮忙。非常感谢您的宝贵时间。 – python2learn 2014-10-02 00:46:11

+0

我强烈建议您联系您的教练或助教。如果你被困在'<产生奇数的东西>'和'如果is_even(n):else:'你会在中期前被压制。 – msw 2014-10-02 00:56:06

回答

0

试试这个。它传递了pylint和pep8,并且它运行在python 2上。[4567]和python 3. []

#!/usr/local/cpython-3.4/bin/python 

'''Test if a number is prime''' 

# pylint: disable=superfluous-parens 
# superfluous-parens: Parentheses are good for clarity and portability 

import math 


def is_factor(numerator, denominator): 
    '''Return true if numerator is evenly divisible by denominator''' 
    if numerator % denominator == 0: 
     return True 
    else: 
     return False 


def is_even(number): 
    '''Return true if numerator is evenly divisible by 2''' 
    return is_factor(number, 2) 


def odds_to(maximum): 
    '''Return odd numbers up to maximum''' 
    number = 3 
    while number <= maximum: 
     yield number 
     number += 2 


def get_factor(number): 
    ''' 
    Return the lowest factor of number. 
    If number is prime, return 0 
    ''' 
    if is_even(number): 
     return 2 
    else: 
     top = int(math.sqrt(number)) 
     for odd_number in odds_to(top): 
      if is_factor(number, odd_number): 
       return odd_number 
     return 0 


def get_number(): 
    '''Return the value of Mersenne 67''' 
    # number = 11 
    # number = 6 
    # number = 15 
    number = 2 ** 67 - 1 
    return number 


def main(): 
    '''Main function''' 
    number = get_number() 
    factor = get_factor(number) 

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

main() 
+0

拍摄。我正在使用在线编译器,并且难以运行它。你能告诉我,Merseene 67的产量是多少? – python2learn 2014-10-02 02:10:49

+1

'if condition:return True''else:return False' is a tad verbose,do you think? – 2014-10-02 14:30:30

+0

根据[整数序列A000043的在线百科全书](https://oeis.org/A000043),67 **不是** Mersenne指数。 – msw 2014-10-02 22:08:16

相关问题