Python-Prime求和为偶数

时间:2011-03-29 01:37:59

标签: python primes

这是我教授给我的任务。我不知道从哪里开始或做什么! 重点是使用循环来解决这个问题,我可以做循环,但这让我大吃一惊。

偶数和素数。

素数是1,它本身是唯一的除数。 2,3,5,7和11是前几个。注意 “素数”纯粹是一种乘法条件 - 它与加法无关。所以它可能是 令人惊讶的是,如果我们开始列出偶数,它们似乎是两个素数的总和(加法!)。 4 = 2 + 2,6 = 3 + 3,8 = 5 + 3,10 = 3 + 7,12 = 7 + 5,14 = 7 + 7,16 = 13 + 3,...

总是这样吗?每个偶数都可以写成两个素数的总和吗?

  1. 编写is_prime(n)函数。 它应接受正整数n> 1作为输入,并输出True或False,具体取决于n是否为n 素数。使用循环来执行此操作,该循环检查是否对于任何整数d,1< d< sqrt(n),d除n。 我建议使用while循环 - 仔细考虑循环的条件,以及何时想要更改 这个条件在循环内。 (根据你的情况使用布尔值)。
  2. 写一个prime_sum(n)函数。 它应该接受偶数n> 1作为输入,并通过循环搜索素数p& q,p + q = n。 提示:从p = 3开始。如果(p)和(n-p)是素数,那么你就完成了。如果没有,请设置p + = 2然后重试。 确保你不要永远搜索!
  3. 主。
    • 向用户询问偶数n。不断问他们,直到他们确实给你一个积极的偶数。
    • 搜索p& q,并将它们打印出来(如果它们存在)或者说它们不存在。
    • 询问用户是否希望尝试使用其他人,并让他们继续,直到他们退出。

  4. 我不知道我可以编辑这个! :)所以这就是我到目前为止所拥有的。我还没有测试它调试它b / c我想把它全部搞定,当错误弹出时我会解决它们,但是如果你看到任何直接的问题让我知道。

    def is_prime(n):
        d=2
        while n>1 and d<n**0.5:
            if n%2==0:
                c=False
            d+=1
        return c
    
    def prime_sum(n):
        p=3
        while n>1:
            q=n-p
            if q<=0:
                p+=2
                q=n-p
                is_prime(q)
            else:
                is_prime(q)
                is_prime(p)
        while True:
            print("The prime summands of", n, "are", p, "and", q)
        while False:
            print("There are no prime summands of", n)
    
    def main():
        n=eval(input("Gimme an even number please: "))
        while True:
            n=eval(input("That is not a positive even number. Try again: "))
        #not sure how to combine yet, but I am still finishing.
        #will edit again when I have it all down.
    

2 个答案:

答案 0 :(得分:2)

不要担心作业难以理解。当教授打破它时,一步一步走。

答案 1 :(得分:-1)

Prime Number

  

素数(或素数)是a   自然数恰好有两个   不同的自然数除数:1   和它本身。

<强> A)

def is_prime(n):                 # Write a is_prime(n) function.
    if n <= 1:                   # It should accept a positive integer n>1 
        return False
    if n == 2:                   # 2 has 2 divisors 1 and itself satisfying definition
        return True
    i = 2                        # Start from 2 and check each number to the sqrt(n)
    while i < n**0.5:            # sqrt(n) can be written as n**0.5
        if n % i == 0:           # If n is divisible by i, which is not 1 or itself, 
            return False         #    return False (not prime)
        i+=1                     # Increment i by 1 and check looping condition
    return True                  # If loop breaks, return True (prime)

可以通过各种方式发现素材。这是最基本的一种,唯一的优化是检查的除数​​在n的根处停止,而不是将每个数字都检查为n。

最基本的可能是:

def is_prime(n):
    if n < 2:
        return False
    for i in range(2,n):
        if n % i == 0:
            return False
    return True

<强> B)

def prime_sum(n):
    if n % 2 or n < 1:                          # if n is odd or less than 1 return invalid
        return "invalid input"
    p = 3
    while n-p > 0:
        if is_prime(p) and is_prime(n-p):       
            return (p, n-p)                     # if both conditions are met, return prime tuple
        p+=2                                    # only check odd numbers
    return "no answer found"