素数问题

Jon*_*han 6 java primes

我正在尝试编写一个程序,以找到一个非常大的最大素数因子,并尝试了几种不同的成功方法.到目前为止我发现的所有这些都令人难以置信地缓慢.我有一个想法,我想知道这是否是一个有效的方法:

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.

Sam*_*ell 22

该方法可行,但速度很慢."你的数字有多大?" 确定使用方法:

  • 我对您从未听说过的算法的引用给我留下了深刻的印象,但是:这些算法是否更适合于查找*所有*素数达到给定限制,而不是分解单个数字? (2认同)

Mar*_*ers 16

由于Unique Prime Factorization定理,这将始终有效.

  • 对于极端情况,0和1既不是素数也不是复合,并且鉴于long已签名,您需要弄清楚如何处理负数. (2认同)