Python :: Aufgabe #294

2 Lösungen Lösungen öffentlich

Goldbachsche Vermutung (binär)

Fortgeschrittener - Python von JKooP - 13.10.2020 um 08:32 Uhr
Die Goldbachsche Vermutung besagt, dass jede gerade Zahl größer 2 die Summe zweier Primzahlen ist.

1. Schreibe eine Funktion/Methode, die jeweils ein mögliches Primzahlenpaar bis zur Zahl 1000 ausgibt.

Beispiele:

4 = 2 + 2 -> (2, 2)
6 = 3 + 3 -> (3, 3)
8 = 3 + 5 -> (3, 5)

Duplikate durch Vertauschung wie z.B. (3, 5) -> (5, 3) sollen verhindert werden.

2. Schreibe eine Funktion/Methode, die alle mögliche Primzahlenpaare bis zur Zahl 1000 ausgibt.

Beispiele:

10 = 3 + 7 = 5 + 5 -> [ (3, 7), (5, 3) ]
14 = 3 + 11 = 7 + 7 -> [ (3, 11), (7, 7) ]

Viel Spaß

Lösungen:

vote_ok
von Marty3000 (680 Punkte) - 04.11.2020 um 09:11 Uhr
Quellcode ausblenden Python-Code
def get_prim(last: int):
    prim = [2]
    for i in range(prim[0], last):
        is_prim = True
        for p in prim:
            if is_prim and i % p == 0:
                is_prim = False
        if is_prim:
            prim.append(i)
    return prim


def goldbach(last: int, print_all: bool):
    if print_all:
        print("Alle Primzahlpaare")
    else:
        print("Nur ein Primzahlpaar")
    all_prim = get_prim(last)
    for i in range(4, last + 1, 2):
        txt: str = str(i)
        done: bool = False
        for p in all_prim:
            if not done and p <= i / 2 and all_prim.count(i - p) == 1:
                txt += " = %d + %d" % (p, i-p)
                done = not print_all
        print(txt)


if __name__ == '__main__':
    goldbach(1000, False)
    goldbach(1000, True)
vote_ok
von Klaus (1780 Punkte) - 11.12.2020 um 12:12 Uhr
Quellcode ausblenden Python-Code
import random as rnd

def check_prime(number):
    for index in range (2, number//2 + 1):
        if number % index == 0:
            return False
    return True

prime_numbers = []
for index in range (2, 1000):
    if check_prime(index):
        prime_numbers.append(index)

solution = {}
for number in range (4, 1001, 2):
    solution[number] = []
    for summand_1 in prime_numbers:
        for summand_2 in prime_numbers:
            if summand_1 + summand_2 == number and sorted([summand_1, summand_2]) not in solution[number]:
                solution[number].append(sorted([summand_1, summand_2]))

input('Taste für Teilaufgabe 1 drücken ...')

print('Teilaufgabe 1\n-------------')
for key in solution:
    print(f'{key:4.0f} --> {rnd.choice(solution[key])}')

input('\n\nTaste für Teilaufgabe 2 drücken ...')

print('\nTeilaufgabe 2\n-------------')
for key in solution:
    print(f'{key:4.0f} --> {solution[key]}')