分解质因子


1.问题

【问题描述】
输入一个正整数 n,用递归方法从小到大输出它的所有质因子(因子是质数)。
【输入格式】
一行一个正整数 n,2≤n≤10000。
【输出格式】
一行若干个正整数,两数之间用一个空格隔开,从小到大输出。
【输入样例】
18
【输出样例】
2 3 3

 

2.问题分析

  1.质数是一个大于1的自然数,如果n小于等于1的数,不符合条件,要做异常处理

  2.如果n大于1,从整数p(p从2开始)开始试除,

      如果n能够被p整除,就得到一个质因子p,并把p大于出来。 问题就转化为整数n/p,从整数p开始求质因子

      如果n不能被p整除,就是p不是n的质因子,问题转化为:整数n,从p+1开始求质因子

    

 

3.程序及其备注

 

#include<iostream>
using namespace std;
bool first = true;//第一个质因子直接输出,后续的质因子加一个空格输出 
void zyz(int n,int p){
    if(n > 1){
        /*
            如果可以整除 n/p后继续递归求质因子,否则n对p+1求质因子 
        */ 
        if(n % p == 0){
            /*
              如果第一次直接输出质因子,否则加空格输出质因子 
              */ 
            if(first){
                cout << p; 
                first = false;
            }
            else cout <<  " " << p;
            zyz(n/p,p);
        }
        else zyz(n,p+1);
    }
}
int main(){
     int n;
     cin >> n;
     zyz(n,2);
     cout << endl;
     return 0;
}
//输入12
//输出 2 2 3 

4.运行结果

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM