题解 | #质数因子#

质数因子

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<<" ";
    
    
}

题目要求所有质因数,可以分解为求原数分解成两个因数,然后求他们的质因数,然后还可以继续以此思路分解问题,是一种典型的递归思想。由于递归因数自增是从小到大自增,所以越小的数肯定在越前面被添加进答案数组,所以递归后无需排序

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务