Ich versuche zu lösen Frage 3 für Projekt Euler, gefunden here. Ich möchte es lösen, indem Sie eine Liste der Primzahlen mit Eratosthenes Sieb (gefunden here. Ich bin nicht annähernd fertig die Frage , aber ich habe in ein kleines Problem gerannt ...Generieren Primzahlen über Eratosthenes Sieb C#
Unten ist mein Code Ich habe gearbeitet, um dies zu tun.Allerdings, wenn ich diesen Code ausführen, stagniert es meinen Computer, und gibt eine 2 vor dem Abwürgen es mehr Es läuft offensichtlich, aber es scheint nicht zu sein, es richtig zu machen. Bevor es die Liste ausgibt, sollte es mich wissen lassen (nur prüfen, ob das Aufhängen vor der Ausgabe ist), es ist die Zuordnung der Liste ...
Wenn Sie nicht sicher sind, was vor sich geht, können Sie mir Hinweise geben, wie Sie den Code durchsuchen und seine verschiedenen Zeilen debuggen können? Ich habe Console.WriteLine in verschiedenen Bereichen versucht, aber es scheint nicht auf den Code zu reagieren.
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
static void Main(string[] args)
{
long maxNum = 100;
double maxSqrt = Math.Floor(Math.Sqrt(maxNum));
long basePrime;
// Make a list from 2 to maxNum
List<long> numberList = new List<long>();
List<long> sievedList = new List<long>();
for (long i = 2; i <= maxNum; i++) numberList.Add(i);
// Evaluate the first number of the list, if it is < maxSqrt skip it, create a list of multiples and Except them from numberList, else, numberList is completely Prime Factors
foreach (long number in numberList.Skip(1))
{
basePrime = numberList[0];
Console.WriteLine(basePrime);
while (number < maxSqrt)
{
if (number % basePrime == 0)
{
sievedList.Add(number);
}
numberList = numberList.Except(sievedList).ToList();
sievedList.Clear();
}
}
Console.WriteLine("Finished Allocating Primes");
numberList.ForEach(Console.WriteLine);
}
}
maxSqrt sollte sich nur ändern, wenn sich maxNum ändert. Ich habe den Eindruck, dass die Quadratwurzel einer Zahl der höchste ist, dessen Faktor sein kann und immer noch möglicherweise prim ist. – RaineAndrews
Sie sollten jetzt wirklich lernen, den Debugger zu verwenden. Es hätte den Fehler in Ihrer 'while' Schleife in viel kürzerer Zeit gefunden, als Sie Ihre Frage hier erstellt haben. Wenn Sie Ihren Code durcharbeiten, können Sie viel über bessere Möglichkeiten zum Schreiben von Code lernen. Du änderst niemals 'number', so dass es immer'
Also wird die While-Schleife ihren Wert nicht wirklich ändern, weil sich die Zahl nicht ändert, bis die Zahl größer ist als maxSqrt? – RaineAndrews