+1 Daumen
1,9k Aufrufe

Aufgabe:

Schreiben Sie eine Prozedur, die eine vorgegebene gerade natürliche Zahl n als Summe von zwei Primzahlen schreibt (in SageMath).

Avatar von

Ja, das ist doch schon ein guter Anfang. Vielleicht möchtest du \(k+(n-k)=n\) verwenden?

Du meinst jetzt als meine variable? Damit ich sie direkt als Summe darstellen kann?


Und wie mache ich das mit der Schleife? Eine while Schleife die sich so lange wiederholt bis beides Primzahlen sind?

Du lässt die Schleife über k laufen, den verwendeten Schleifenbefehl kannst du aus mehreren sinnvollen Möglichkeiten auswählen, ebenso einen dazu passenden Schleifenstart. Eine der Abbruchbedingungen hast du schon genannt, allerdings musst du noch bedenken, dass die Goldbachsche Vermutung vielleicht doch nicht gilt.

Der schleifenstart ist doch dann einfach bei den Primzahlen bis unendlich, richtig?

Aber wenn die goldbachsche vermutung nicht gilt, dann möchte ich trotzdem eine Zerlegung in eine Summe von Zahlen. Das heißt ich muss einen return mehr einbauen, dass wenn die Primzahlen durchlaufen sind, es eine andere Summe gibt (?)

Also mache ich jetzt eine for schleife über k:

Mit n=k+(n-k)

For k in (??) :

If k. Is_prime & n-k.is_prime

Else: return

Print k, n-k

So?

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Goldbachsche Vermutung programmieren

Die Goldbachsche Vermutung ist eines der ältesten ungelösten Probleme in der Zahlentheorie. Sie besagt, dass jede gerade Zahl größer als 2 als Summe von zwei Primzahlen geschrieben werden kann. Um diese Vermutung für eine spezifische Zahl zu überprüfen, können wir einen Algorithmus in SageMath programmieren, der eine gegebene gerade Zahl als Summe von zwei Primzahlen darstellt, falls dies möglich ist.

Zuerst werden wir eine Funktion definieren, die überprüft, ob eine Zahl eine Primzahl ist, obwohl SageMath bereits Funktionen zur Überprüfung von Primzahlen hat (is_prime). Danach entwickeln wir eine Funktion, die die gegebene gerade Zahl nimmt und versucht, sie in zwei Primzahlen zu zerlegen.

Primzahlüberprüfung in SageMath (optional):

python
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True


Diese Funktion ist allerdings optional, da SageMath eingebaute Möglichkeiten bietet, zu überprüfen, ob eine Zahl eine Primzahl ist. Für unsere Zwecke wäre es effizienter, direkt die eingebaute Funktionalität zu nutzen.

Goldbach-Funktion:

python
def goldbach(n):
    # Überprüfen, ob n gerade und größer als 2 ist
    if n % 2 != 0 or n <= 2:
        print("Die Zahl muss gerade und größer als 2 sein.")
        return None
    
    # Wir versuchen, zwei Primzahlen zu finden, deren Summe n ergibt
    for i in range(2, n//2+1):
        if is_prime(i) and is_prime(n-i):  # Verwenden Sie hier direkt is_prime von SageMath für Effizienz
            print(f"{n} = {i} + {n-i}")
            return (i, n-i)
    
    # Falls keine entsprechenden Primzahlen gefunden wurden (sollte laut Vermutung nie passieren)
    print("Keine zwei Primzahlen gefunden, die zusammen die Zahl ergeben.")
    return None


Um den Code effizienter zu gestalten und direkt die Vorteile von SageMath zu nutzen, ersetzen Sie is_prime(i) mit der eingebauten SageMath-Funktion is_prime. So sieht die optimierte Version der goldbach-Funktion aus:

python
def goldbach(n):
    # Überprüfen, ob n gerade und größer als 2 ist
    if n % 2 != 0 or n <= 2:
        print("Die Zahl muss gerade und größer als 2 sein.")
        return None
    
    # Wir versuchen, zwei Primzahlen zu finden, deren Summe n ergibt
    for i in range(2, n//2+1):
        if is_prime(i) and is_prime(n-i):
            print(f"{n} = {i} + {n-i}")
            return (i, n-i)
    
    # Falls keine entsprechenden Primzahlen gefunden wurden (sollte laut Vermutung nie passieren)
    print("Keine zwei Primzahlen gefunden, die zusammen die Zahl ergeben.")
    return None


Dieser SageMath-Code überprüft eine gegebene Zahl n darauf, ob sie als Summe von zwei Primzahlen geschrieben werden kann, und gibt ein entsprechendes Primzahlenpaar zurück. Die Vermutung besagt, dass dies immer möglich sein sollte, sofern n eine gerade Zahl größer als 2 ist.
Avatar von

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

1 Antwort
1 Antwort
0 Antworten
1 Antwort

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community