为什么我的查找最大素数的程序从不写入控制台

本文关键字:程序 控制台 查找 我的 为什么 | 更新日期: 2023-09-27 18:14:14

我调试了我的代码,一切都很完美。但是由于某些原因,我的代码从来没有写入到控制台。

下面是我的代码:
  long largest = 0;

        for (long i = 1; i < 600851475144; i++)
        {
            long check = 0;
            for (long j = 1; j < i + 1; j++)
            {
                if ((i%j) == 0)
                {
                    check++;
                }
            }
            if (check == 2)
            {
                largest = i;
            }
        }
        Console.WriteLine(largest);
        Console.ReadKey();

问题:我怎么写控制台?

为什么我的查找最大素数的程序从不写入控制台

你的算法太慢,无法在合理的时间内完成,所以你需要想出一个替代方法。

首先,算法必须停止检查朴素定义(两个除数)。如果你检查这个数的平方根之前的所有除数,没有找到,这个数就是素数。其次,如果你在一个范围内寻找最大的素数,从范围的顶部开始,往下,在找到第一个素数时停止。第三,尝试偶数是没有意义的。

实现这三个更改将使您的算法及时运行。

什么?

它会完成,但它会永远持续下去,因为它必须做所有的迭代。

求质数的计算是一项非常密集的计算,尤其是你这样做的。

总结,它不返回是因为你必须等待分钟/小时/天/年?来计算

你的算法很差。它必须进行大量的迭代。正如其他人已经提到的,除以偶数是没有意义的,因此增加2,从3开始,您可以将迭代计数减少到给定数字的平方根。我的也不完美,但一眨眼就完成了。其思想是通过将给定的数除以所有找到的除数来减少迭代次数。试试吧,风险自负!

    long FindLargestPrimeDivisor(long number)
    {
        long largestPrimeDivisor = 1;
        while (true)
        {
            if (number % largestPrimeDivisor == 0)
            {
                number /= largestPrimeDivisor;
            }
            if (number < largestPrimeDivisor)
            {
                break;
            }
            largestPrimeDivisor++;
        }
        return largestPrimeDivisor;
    }