[英]C# find large prime numbers
我正在用 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);
}
我的算法有问题吗? 因为每次我检查素数时,它都会认为每个数字都是素数并将其打印出来。
我确实将您的代码复制粘贴到 Visual Studio 中,运行它并且它运行良好。 该算法是合理的,尽管您绝对可以对其进行优化。
首先,0 和 1 不是素数,这是一个非常慢的算法。 您应该考虑对代码进行一些优化。 像这样但是您的代码应该可以正常工作。
IEnumerable<UInt64> PrimeNumbers(UInt64 maxCap = UInt64.MaxValue)
{
yield return 2;
yield return 3;
for (var i = 4; i <= maxCap; i++)
{
var isPrime = true;
for (var j = 2; j <= i / 2; j++)
{
if (i % j != 0) continue;
isPrime = false;
break;
}
if (isPrime) yield return i;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.