为什么list.count在此代码中返回0

Pra*_*ngh 1 .net c# loops infinite-loop

我想找到这个数字的所有因子并将因子存储到一个列表中,但这个list.count返回零

    List<double> listOfFactors = new List<double>();
    public void FindFactors()
    {
        double num = 600851475143 / 2;
        for (int i = 1; i <= num; i++)
        {
            if (600851475143 % i == 0)
            {
                listOfFactors.Add(i);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

主要功能代码

      class Program
{
    static void Main(string[] args)
    {
        Calculate cl = new Calculate();
        cl.FindFactors();
    }
}
Run Code Online (Sandbox Code Playgroud)

McG*_*gle 6

此代码陷入无限循环.原因是这里num是300425737571,但最大值int是2147483647. for循环永远不会结束.

Console.WriteLine(int.MaxValue);
Console.WriteLine(int.MaxValue+1);
Run Code Online (Sandbox Code Playgroud)

2147483647

-2147483648

编辑#1

这是3000亿件物品.让我们(慷慨地)说每次迭代都需要100条CPU指令.这意味着大约30万亿条指令,在2.5GHz处理器上应该在大约1000秒(15分钟)内完成.

编辑#2

两个小时后,它完成了.你会很高兴知道结果是15:

  • 71
  • 839
  • 1471
  • 6857
  • 59569
  • 104441
  • 486847
  • 1234169
  • 5753023
  • 10086647
  • 87625999
  • 408464633
  • 716151937
  • 8462696833