题解 | #质数因子#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
C++递归写法
#include<string>
#include<vector>
#include<math.h>
using namespace std;
bool isPrimeFactor(int num){
int sqrtnum=sqrt(num);
for(int i=2;i<=sqrtnum;++i){
if(num%i==0) return false;
}
return true;
}
void findAllPrimeFactor(int num,int currentfactor,vector<int>&res){
if(isPrimeFactor(num)){
res.push_back(num);
return;
}
if(num%currentfactor==0){//当前因子是原数的因数
findAllPrimeFactor(currentfactor,2,res);
findAllPrimeFactor(num/currentfactor,2,res);
}
else{
findAllPrimeFactor(num,currentfactor+1,res);
}
}
int main(){
int num;
vector<int> res;
cin>>num;
findAllPrimeFactor(num, 2,res);
for(auto it:res) cout<<it<<" ";
}
题目要求所有质因数,可以分解为求原数分解成两个因数,然后求他们的质因数,然后还可以继续以此思路分解问题,是一种典型的递归思想。由于递归因数自增是从小到大自增,所以越小的数肯定在越前面被添加进答案数组,所以递归后无需排序