算法思想:1、判断是否为素数,如果是,将该数加入素因子集合,返回。2、否则,从2到该数的平方根,
依次将该数分解为两个数的乘积,分别对分解后的数进行判断。3、上述过程递归进行。
C++实现:
/*
* 获取正整数的所有素因子
* n为正整数
* primes保存所有的素因子,如:8=2*2*2,12=2*2*3
*/
static void getPrime(int n, vector<int> &primes) {
if (isPrime(n)) {
primes.push_back(n);
return;
}
int k = 2;
while (k <= (int) sqrt((double) n)) {
if (n % k == 0) {
if (isPrime(k)) {
primes.push_back(k);
} else {
getPrime(k, primes);
}
int j = n / k;
if (isPrime(j)) {
primes.push_back(j);
} else {
getPrime(j, primes);
}
return;
}
k++;
}
}
注:isPrime为素数测试函数,参见:http://blog.csdn.net/chtnj/article/details/19915205