题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如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的所有整数因子。
如果想求一个数的整数因子,就是把这个数写成两个数的乘积的形式,所有的可能的因子就是这个数的整数因子。