【每日一练】11


题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )

最后一个数后面也要有空格

详细描述:
函数接口说明:

public String getResult(long ulDataInput)

输入参数:

long ulDataInput:输入的正整数

返回值:

String

输入描述:

输入一个long型整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1

输入

180

输出

2 2 3 3 5
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
/*
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子
(如180的质数因子为2 2 3 3 5 )

最后一个数后面也要有空格
详细描述:
函数接口说明:
public String getResult(long ulDataInput)

输入参数:
long ulDataInput:输入的正整数

返回值:
String

输入描述:
输入一个long型整数

输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1
输入
180
输出
2 2 3 3 5
*/

string getAllDivisor(long num){
    string str;
    vector<long > str_vec_int;
    if(num <= 1){
        return "";
    }
    else if(num == 2){return "2";}
    else if(num == 3){return "3";}
    else{
        while(num > 2){
            while(num % 2 == 0){
                num /= 2;
                str_vec_int.push_back(2);
            }
            if(num >= 3){
                for(long i = 3;i <= num;i++){
                    if(num % i == 0){
                        str_vec_int.push_back(i);
                        num /= i;
                    }
                    i++;
                }
            }
        }
    }
    if(!str_vec_int.empty()){
        sort(str_vec_int.begin(),str_vec_int.end());
        for(auto i : str_vec_int){
            stringstream ss("");
            ss << i;
//            cout << i<< endl;
//            cout << ss.str() << endl;
            str += ss.str();
            str += " ";
        }
    }
    return str;
}
int main()
{
    long num;
    while(cin >> num){
        cout << getAllDivisor(num) << endl;
    }
    return 0;
}

补充:

质数:质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

因数与因子:

① 因数(又称为约数)

两个数相乘,比如 3 * 5 = 15,我们称:3和5是因数,15是积。

② 因子

对于因子,变了一种说法,3和5不叫因数了,我们叫它因子,我们的意义是一样的。所以,3和5是15的整数因子,但不是15的所有整数因子。

1*15=15,3*5=15

所以1,3,5,15 这四个数是15的所有整数因子。

如果想求一个数的整数因子,就是把这个数写成两个数的乘积的形式,所有的可能的因子就是这个数的整数因子。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值