Ich habe Goldbachs Problem nicht verstanden

Heute möchte ich Ihnen erzählen, wie ich versucht habe, das Goldbach-

Problem zu lösen . Das Goldbach-Problem ist die Aussage, dass jede gerade Zahl, beginnend mit 4, als Summe von zwei Primzahlen dargestellt werden kann. Das heißt, 6 = 3 + 3; 8 = 5 + 3 ... Nach meinem Verständnis ist die Lösung des Problems ein Beweis oder eine Widerlegung dieser Aussage.



Als erstes müssen wir eine Methode implementieren, um zu überprüfen, ob eine Zahl eine Primzahl ist. Eine Primzahl ist eine Zahl, die nur durch sich selbst und durch eins teilbar ist.

public static bool IsPrimeNumber(ulong n)
{
    var result = true;
    if (n > 1)
    {
        for (ulong i = 2; i < n; i++)
        {
           if (n % i == 0)
           {
                result = false;
                break;
            }
        }
    }
    else
    {
        result = false;
    }
    return result;
}


Jetzt müssen wir eine Sammlung aller Primzahlen bis ulong.MaxValue = 18446744073709551615 (2 ^ 64-1) erhalten.

public static IEnumerable<ulong> GetAllPrimeNumbers(ulong maxNumber)
{
    List<ulong> primeNumbers = new List<ulong>();
    for (ulong i=0; i < maxNumber; i++ )
    {
        if (IsPrimeNumber(i))
        {
            primeNumbers.Add(i);
        }
    }
    return primeNumbers;
}


Die Intuition legt nahe, dass die Berechnung sehr lange dauern wird, sodass wir ihre Anzahl auf 300.000 reduzieren werden

static void Main(string[] args)
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    IEnumerable<ulong> primeNumbers = GetAllPrimeNumbers();
    checkGoldbach(primeNumbers); 
    stopwatch.Stop();
    Console.WriteLine("  " + stopwatch.Elapsed.TotalSeconds + " ");
    foreach(var number in primeNumbers)
    {
        Console.Write(number + " ");
    }
    Console.ReadKey();
}


Bild

Dann wollte ich alle Primzahlen bis zu 2 ^ 64 finden (es schien mir, dass ein paar Stunden Berechnungen für mich ausreichen würden).

Nach zwei Minuten Ausführen des Programms entschied ich mich, einen Haltepunkt zu setzen und zu überprüfen, welche Zahl der Einfachheit halber überprüft wird:

Bild

411780 Iterationen nach zwei Minuten Berechnungen. Ich habe mich entschlossen, die Methode zur Überprüfung der Einfachheit einer Zahl leicht zu optimieren, da nach der Hälfte der Zahl keine weitere

Bild

Iteration erforderlich ist . Daher halbiert sich die Anzahl der zur Überprüfung der Einfachheit erforderlichen Iterationen. Es schien mir, dass sich die Anzahl der Iterationen in 2 Minuten verdoppeln sollte

Bild

Aber auch hier habe ich mich geirrt. Die Produktivität stieg nicht um 100%, sondern um 22%. Wie ich später verstanden habe, ist dies auf die Tatsache zurückzuführen, dass die Hälfte der Schecks wie zuvor durch Teilen durch 2 eliminiert wird, ein Drittel aller Zahlen, die nicht durch Dividieren durch 2 eliminiert werden, durch Dividieren durch 3 eliminiert werden usw. Von den 500.154 Einfachheitstests wurden 41549 Primzahlen gefunden. Das heißt, die für die Iteration

for (ulong i = 2; i <= n/2; i++)
{
    if (n % i == 0)
    {
        result = false;
        break;
    }
}


bis zum Ende (ohne Pause) nur 41.549 Mal ausgeführt. In anderen Fällen wurde es früher unterbrochen ...

500154 und nicht annähernd 2 ^ 64, Sie müssen berechnen, wie lange es dauern wird, um die Einfachheit aller Zahlen auf 2 ^ 64 zu überprüfen.

Reduzieren wir zunächst die Anzahl der Iterationen von 2 ^ 64 auf 30000 und berechnen die Laufzeit der Stoppuhrmethode,

Bild

über die iteriert werden soll Zahlen bis zu 30.000, 1 Sekunde wurde

jetzt aufgewendet. Erstellen wir eine Tabelle mit anderen Werten für die Anzahl der Iterationen

Bild

. Schreiben wir das Ergebnis in Excel und erstellen ein Punktdiagramm für die Koordinaten "Anzahl der Iterationen für die Zeit" und "Anzahl der Primzahlen pro Bereich".





Jetzt können wir die ungefähre Anzahl der Primzahlen bis herausfinden 2 ^ 64 und ungefähr wie lange es dauern wird, sie alle zu finden

Wenn Sie dem Diagramm "Primzahlen pro Bereich" eine "lineare" Trendlinie hinzufügen, erhalten Sie in Excel die Formel y = 0,074x + 3004 (ich habe keine Ahnung, wie genau die Formel ist). Dies bedeutet, dass die ungefähre Anzahl der Primzahlen bis zu ulong.MaxValue = 0,074 * 2 ^ 64 + 3004;

Auf die gleiche Weise erhalten wir durch Hinzufügen der Trendlinie "Polynom" zum Diagramm "Anzahl der Iterationen über die Zeit" die Formel y = 7E-10x2 + 6E-05x. Wenn Sie unsere Zahl 2 ^ 64 anstelle von x einsetzen, können Sie feststellen, dass wir ungefähr 2,38E + 29 Sekunden oder 7553198149564240000000 Jahre benötigen, um alle Primzahlen bis zu 2 ^ 64 zu finden. Ok, so viel kann ich nicht erwarten.

Versuchen wir zu beweisen, dass Goldbachs Vermutung für alle geraden Zahlen bis zu 300.000 gilt.

public static void checkGoldbach(IEnumerable<ulong> primeNumbers)
{
    ulong numbersCount = 300000;
    for (ulong number = 4; number<numbersCount; number+=2)
    {
        bool isGoldbachResult = false;
        foreach(ulong primeNumber1 in primeNumbers)
        {
            foreach(ulong primeNumber2 in primeNumbers)
            {
                if(primeNumber1+primeNumber2==number)
                {
                    Console.WriteLine("{0} = {1} + {2}", number, primeNumber1, primeNumber2);
                    isGoldbachResult = true;
                    break;
                }
                if(primeNumber1+primeNumber2>number)
                {
                    break;
                }
            }
            if(isGoldbachResult|| primeNumber1>number)
            {
                break;
            }
        }
        if(!isGoldbachResult)
        {
            Console.WriteLine(" " + number + "         ");
            break;
        }
    }
}


Wenn die Aussage von Goldbach für eine Zahl nicht zutrifft, wird die Berechnung bei dieser Zahl beendet.



Nach 9 Minuten Berechnungen können wir sagen, dass die Goldbach-Hypothese für Zahlen unter 300.000 gültig ist.

Gesamt



Es stellte sich heraus, dass nicht alles so einfach war, wie es mir am Anfang erschien, und ich verstehe, dass ich der Lösung des Problems überhaupt nicht nahe bin.

Höchstwahrscheinlich scheint es mir bessere Möglichkeiten zu geben, eine Zahl der Einfachheit halber zu überprüfen. Es ist möglich, dass die Methode, mit der gerade Zahlen auf die Richtigkeit von Goldbachs Aussage überprüft werden, rationaler implementiert werden kann als eine einfache Aufzählung von Primzahlen, aber ich möchte nicht mehr so ​​viel Zeit damit verbringen ... Die

Lösung von Goldbachs Problem wird der Menschheit nichts geben. Bisher wurde bewiesen, dass die Hypothese für Zahlen bis 4 * 10 ^ 18 gilt, aber wozu ist es sinnvoll, sie für alle Zahlen zu beweisen? Zu welchem ​​Zweck schreiben Mathematiker Bücher zu diesem Thema und verbringen im Allgemeinen ihre Zeit damit, solche "Probleme" zu lösen?

Ich möchte wirklich sachkundige Personen fragen, ob meine Formel zur Berechnung der Anzahl der Primzahlen pro Bereich ein Existenzrecht hat.

PS



Höchstwahrscheinlich muss ich keine Artikel schreiben, über die ich wenig weiß. Ich hatte nicht erwartet, dass die Community so reagiert. Aber ich habe nicht so getan, als wäre meine Entscheidung die einzig richtige. Ich bin ein Amateur auf diesem Gebiet.

Zu welchem ​​Zweck habe ich diesen Artikel geschrieben?

Ich nahm mir die Zeit, um diese Frage zu untersuchen, und es schien mir, dass einige Leute es mögen könnten. Es war interessant für mich, weil es eine lustige Aufgabe ist. Aber warum verschwenden Mathematiker ihre Zeit damit? Ich verstehe den wirklichen Nutzen der Erforschung dieser spezifischen Fragen aufrichtig nicht.

PPS



Nachdem ich die Rezensionen zu dem Artikel gelesen hatte, beschloss ich, Schlussfolgerungen zu ziehen.

Höchstwahrscheinlich scheint es mir bessere Möglichkeiten zu geben, eine Zahl der Einfachheit halber zu überprüfen


Wie von den Benutzern vorgeschlagen dvserg Warum und Pavel_The_BestDas ist tatsächlich so. Mit dem Eratosthenes-Sieb kann beispielsweise eine Sammlung von Primzahlen viel schneller gesammelt werden. Hier sind Artikel, die Sie zu diesem Thema lesen können: Algorithmus zur Überprüfung der Einfachheit in O (log N) , Wikipedia , Sie können die Werke von Srinivas Ramanujan Iyengor lesen

Hat meine Formel zur Berechnung der Anzahl der Primzahlen pro Bereich das Existenzrecht?


Nein

Die Lösung von Goldbachs Problem wird der Menschheit nichts geben?


Meine Meinung, dass einige mathematische Probleme nutzlos sind, führte bei den meisten Benutzern zu einer stark negativen Einstellung. Benutzervvadzim Kühlschrank bromzh Graph-in Kühlschrank EimKR bfDeveloper und jakonnten mich davon überzeugen. Ich nehme meine Worte zurück.

Seit der Antike suchen Mathematiker nach der Wahrheit, und ihre Suche führt oft zu positiven Konsequenzen für den Fortschritt. Vielleicht gibt das Problem selbst und seine Lösung der Welt hier und jetzt nichts, aber es sind die Schlussfolgerungen, die bei der Suche nach einer Lösung gezogen werden, die langfristig nützlich sein kann.



All Articles