2011-03-29 60 views
1

这是我的教授给我的任务。我不知道从哪里开始或做什么! 重点是使用循环来解决这个问题,我可以做循环,但这是我的头脑。蟒蛇 - 总理命令为偶数

偶数和素数。

素数是指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是否是 是质数。用一个循环来检查是否有任何整数d,其中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,并将它们打印出来(如果它们存在)或者说它们不存在。
    • 询问用户他们是否希望尝试与另一个,甚至让他们继续,直到他们退出。

我不知道我可以编辑本! :)所以这是我迄今为止。我还没有对它进行测试,以便对它进行调试。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. 
+0

那么你尝试过这么远吗? – iluxa 2011-03-29 01:41:44

+0

“我可以做的循环”向我暗示你理解提示,但我想不是这样。如果不是组织循环的方式,那么赋值中究竟有什么不明白的地方? – senderle 2011-03-29 01:43:00

+0

什么问题?你有步骤。编写is_prime函数。然后继续下一步。我们不会为你做你的功课。你必须编写你自己的代码。 – 2011-03-29 01:43:11

回答

2

不要担心作业的大局很难。随着教授将其分解,请一步一步来。

+0

我的问题是如何启动它。这是我的思维如何工作:: – Callie 2011-03-29 01:50:44

+0

@Callie Camper:写一个is_prime(n)函数。你就是这样开始的。 – 2011-03-29 01:52:29

+0

@Callie,赋值告诉你如何开始:“用循环来检查是否有任何整数d,1 senderle 2011-03-29 01:56:32

-1

Prime Number

素数(或素数)是具有恰好两个 不同自然数除数一个 自然数: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"      
+1

我必须在这里质疑你的教学方法。 @Callie,我希望你不要复制这些,而不必理解你的错误。 – senderle 2011-03-29 02:27:24

+0

@senderle我并不那么愚蠢。此外,这对我的水平来说是非常先进的,所以我正在接受这个概念,并试图用我的语言编写它。我想我知道了(尽管还没有测试过)。 – Callie 2011-03-29 02:52:33