我正在尝试编写一个程序,以找到一个非常大的最大素数因子,并尝试了几种不同的成功方法.到目前为止我发现的所有这些都令人难以置信地缓慢.我有一个想法,我想知道这是否是一个有效的方法:
long number = input;
while(notPrime(number))
{
number = number / getLowestDivisiblePrimeNumber();
}
return number;
Run Code Online (Sandbox Code Playgroud)
这种方法需要输入,并将执行以下操作:
200 - > 100 - > 50 - > 25 - > 5(返回)
90 - > 45 - > 15 - > 5(返回)
它将currentNum重复除以最小的可分数(最常见的是2或3),直到currentNum本身为素数(没有可分的素数小于currentNum的平方根),并假设这是原始输入的最大素数因子.
这会一直有效吗?如果没有,有人可以给我一个反例吗?
-
编辑:非常大,我的意思是大约2 ^ 40,或10 ^ 11.