当我想得到大数的所有除数,即n = 10 ^ 12时,我遇到了一个问题。有一种方法可以检查所有可能的数字,小于给定数字n的平方根。
for(int i=1; i<=sqrt(n); ++i){
if(n%i==0){
factors.push_back(i);
if(i!=n/i) factors.push_back(n/i);
}
}
但是当n非常大,即10 ^ 12时,它需要10 ^ 6次迭代,这是非常慢的。
当我得到给定n的所有素数除数时,有没有更快的方法,例如给定的数字是48。 那么720的素数因子化是2 ^ 4 * 3 ^ 2 * 5.
720的所有除数分别为1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,30,36,40,45,48,60 ,72,80,90,120,144,180,240,360,720。
我已经搜索过比O(sqrt(n))更快的方法。但还没有找到。