Я пишу программу на C#, которая найдет все простые числа с максимальным размером UInt64, если только нет числовых данных, больших, чем UInt64. Я уже написал простую программу, но по какой-то причине она возвращает каждое число, которое я проверяю как простое, даже если оно не должно быть простым числом. Вот что у меня есть:C# найти большие простые числа
static void Main(string[] args)
{
UInt64 count = 0;
List<UInt64> primes = new List<UInt64>();
bool prime = true;
do
{
for (UInt64 i = 2; i < count; i++)
{
if ((count % i) == 0)
{
prime = false;
}
}
if (prime == true)
{
primes.Add(count);
Console.WriteLine(count);
}
count++;
prime = true;
} while (count < UInt64.MaxValue);
}
С моим алгоритмом что-то не так. Поскольку каждый раз, когда я делаю чек на премьер, он считает, что каждый номер является простым и распечатает его.
Вы должны рассмотреть возможность использования теста [primality test] (http://en.wikipedia.org/wiki/Primality_test), например [Sieve of Eratosthenes] (http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) - - он намного более эффективен, чем ваш алгоритм. – David
Этот алгоритм, возможно, может пропустить несколько простых чисел, когда вы достигнете очень высоких чисел, которые я намереваюсь сделать. Я хочу удостовериться, что смогу захватить все возможные простые числа, и единственный способ убедиться, что это проверка грубой силы на каждом отдельном номере. – Generalkidd
@ Generalkidd Я не вижу ошибку, но вы не получите очень высокие числа с помощью n-квадратного алгоритма, подобного этому. –