Я пытаюсь решить вопрос 3 для Project Euler, найденный here. Я хотел бы решить его, создав Список простых чисел, используя сито Eratosthene's (найдено here. Я нигде не заканчиваю вопрос , но я столкнулся с небольшой проблемой ...Сгенерируйте простые числа через сито Eratosthene C#
Ниже мой код, над которым я работал, для этого. Однако, когда я запускаю этот код, он закрывает мой компьютер и выдает 2 перед тем, как остановить его еще Очевидно, что он работает, но, похоже, он не делает этого правильно. Перед тем, как он выведет список, он должен сообщить мне (просто проверяя, является ли зависание до вывода). Это делается для распределения списка ...
Если вы не знаете, что происходит, можете ли вы дать мне указатели на то, чтобы копаться в коде и отлаживать его разные строки? Я пробовал Console.WriteLine в разных областях, но он, похоже, не реагирует на код.
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 не должен изменяться, если maxNum не изменяется. Я под впечатлением, что квадратный корень из числа является самым высоким, его фактор может быть и по-прежнему может быть простым. – RaineAndrews
Вам действительно нужно начать учиться использовать отладчик. Он нашел бы ошибку в вашем цикле 'while' за гораздо меньшее время, чем потребовалось вам, чтобы создать свой вопрос здесь. Пошаговый код может научить вас многого о том, как лучше писать код. Вы никогда не меняете 'number', поэтому он всегда останется'
Итак, цикл while фактически не изменит его значение, потому что число не изменится, пока число больше maxSqrt? – RaineAndrews