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:
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)
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]}')
