我正在用C#编写一个程序,它会找到所有素数达到UInt64的最大值,除非有一个大于UInt64的数值数据类型。我已经编写了简单的程序,但出于某种原因,即使它们不应该是素数,它也会返回我检查的每个数字作为素数。这就是我所拥有的:
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);
}
我的算法有问题吗?因为每次我检查一个素数时,它认为每个数字都是素数并且会打印出来。
答案 0 :(得分:2)
我将您的代码复制粘贴到Visual Studio中,运行它并且完美运行。算法很合理,但你绝对可以优化它。
答案 1 :(得分:0)
首先,0和1不是素数,它是一个非常慢的算法。你应该考虑一些最佳代码。像this一样 但是你的代码应该可以正常工作。