myeln

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.运行结果

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-01-15
  • 2022-12-23
  • 2021-11-23
  • 2021-11-27
  • 2022-12-23
  • 2021-08-15
  • 2022-12-23
猜你喜欢
  • 2021-09-24
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2020-03-22
相关资源
相似解决方案