Python :: Aufgabe #294
2 Lösungen
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ß
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:
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)
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]}')