Debuggen eines fehlerhaften Primzahldetektors
Ein Programm zur Identifizierung von Primzahlen innerhalb eines durch eine lange Variable definierten Bereichs erzeugt keine Ausgabe. Die Analyse des Codes deckt zwei kritische Mängel auf:
prime_num()
enthält eine fehlerhafte Bedingung (i
), die eine Endlosschleife verursacht.if (i != j && i % j == 0)
klassifiziert Zahlen mit zusätzlichen Teilern fälschlicherweise als Primzahlen.Ein verbesserter Algorithmus zur Primzahlsuche
Eine effizientere Lösung verwendet eine „Probe-Teilungssieb“-Methode:
<code class="language-csharp">Enumerable.Range(0, Math.Floor(2.52*Math.Sqrt(num)/Math.Log(num))).Aggregate( Enumerable.Range(2, num-1).ToList(), (result, index) => { var bp = result[index]; var sqr = bp * bp; result.RemoveAll(i => i >= sqr && i % bp == 0); return result; } );</code>
Dieser verbesserte Algorithmus verwendet eine Näherung, um die Anzahl der getesteten Hauptkandidaten zu minimieren, was zu erheblichen Leistungssteigerungen führt.
Das obige ist der detaillierte Inhalt vonWarum schlägt mein Programm zur Primzahlenerkennung fehl und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!