繁体   English   中英

C# 查找大素数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM