我试图了解创建有效的素数因子分解算法的问题。具体来说,到目前为止我所做的研究表明,尚未发现任何能够找到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是列表的大小。很明显,我对这个问题的理解是有缺陷的,或者对于素数因子分解不会那么大惊小怪。我哪里错了?
答案 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的长度