Python - простые слагаемые четного числа - PullRequest
1 голос
/ 29 марта 2011

Это задание, которое мне дал мой профессор.Понятия не имею, с чего начать и что делать!Дело в том, чтобы использовать петли, чтобы понять это, и я могу делать петли, но это поражает меня.

Четные числа и простые числа.

Простое число - это число, которое имеет 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
  2. Напишите функцию prime_sum (n).Он должен принимать четное число n> 1 в качестве входных данных и через цикл поиска простых чисел p & q с p + q = n.Подсказка: начните с p = 3. Если (p) и (np) простые, все готово.Если нет, установите p + = 2 и попробуйте снова.Убедитесь, что вы не ищите вечно!
  3. Main.
    • Запросите у пользователя четное число n.Постоянно спрашивайте их, пока они не дадут вам положительное четное число.
    • Найдите слагаемые p & q и либо распечатайте их (если они существуют), либо скажите, что их нет.
    • Спросите пользователя, хотят ли они попробовать еще одну, и пусть он продолжит до тех пор, пока не уйдет.

Я не знал, что ямог бы отредактировать это!:) Так что это то, что я до сих пор.Я еще не тестировал его, чтобы отладить его, потому что я хочу разобраться со всем этим, и когда всплывают ошибки, я их устраню, но если вы обнаружите какие-либо непосредственные проблемы, дайте мне знать.

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 ]

2 голосов
/ 29 марта 2011

Не беспокойтесь о том, как сложная задача. Просто иди шаг за шагом, как проф сломал его.

0 голосов
/ 29 марта 2011

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"                    
...