MATLAB的factor()函数背后会发生什么?

355*_*113 2 matlab primes factorization

主要是,为什么这么快(对于大数字)?该文档仅告诉我如何使用它.例如,它需要最多一秒才能找到最大的素数因子1234567890987654,对我而言,这似乎是疯狂的.

>>max(factor(1234567890987654))

ans =

    69444443
Run Code Online (Sandbox Code Playgroud)

Aki*_*nen 5

要尝试的最大因素是sqrt(N),或者在这种情况下为35136418.即使是最基本的优化也会跳过所有偶数> 2,只留下17568209个候选者进行测试.一旦找到候选人17777778(以及它的辅助因子69444443),该算法将足够明智地停止.

通过改进的筛子可以进一步轻松地改善这种情况,以跳过多个小质数2,3,5 [,7].

基本上即使sqrt(N)优化对于所提到的性能也是足够的,除非你正在处理一个特别老的CPU(8086).