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)
此代码陷入无限循环.原因是这里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
: