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

时间:2015-10-21 05:33:05

标签: matlab primes factorization

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

>>max(factor(1234567890987654))

ans =

    69444443

2 个答案:

答案 0 :(得分:5)

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

这可以通过改进的筛子进一步轻易地改进,以跳过多个小质数2,3,5 [,7]。

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

答案 1 :(得分:2)

查看factorprimes函数的源代码很有意思。

factor(N) essentiallty调用primes查找所有素数sqrt(N)。一旦确定它们,它会逐一测试它们,看它们是否划分N

primes(n)使用Eratosthenes' sieve:对于每个已识别的素数,删除其所有倍数exploiting sqrt again以降低复杂度。