素数分解算法的效率

时间:2017-09-04 11:59:39

标签: math primes prime-factoring

我试图了解创建有效的素数因子分解算法的问题。具体来说,到目前为止我所做的研究表明,尚未发现任何能够找到O(n 2 )时间内数的素因子的算法。但是,对我来说明显的算法就像(伪代码)

method(int number, ArrayList<int> listOfPrimes)
{
    int x = 0;
    for (int i : listOfPrimes)
     {
      for (int j : listOfPrimes)
       { 
         if (i * j = number)
          {
            x = i*j;
          }
        }
      }
     return x;
 }

我认为method是O(n 2 ),其中n是列表的大小。很明显,我对这个问题的理解是有缺陷的,或者对于素数因子分解不会那么大惊小怪。我哪里错了?

2 个答案:

答案 0 :(得分:3)

如@dmuir所暗示,你的“n”不是正确的“n”。否则,一个简单的O(n)算法因子将是:

factor(n){
   for (int i=2; i<n; i++) {
      if (n % i == 0) {
         print("found factor:", i);
         return i;
      }
   }
}

对于分解,输入的大小以数字形式测量,因此“n”是数字中的位数或位数。最好的算法具有非常复杂的复杂性,需要一些数论来理解,但是“大于”多项式时间而“小于”指数时间,其中引用的短语可以是正式的。因此,复杂性有时被称为“次指数”。

答案 1 :(得分:0)

更优化的方式是

<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/ *</url-pattern>
</servlet-mapping>

这将返回数字的计数素数因子。复杂性将是

  

O(n + number_of_prime_factors)

其中n是listOfPrimes的长度