题目描述:
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ),最后一个数后面也要有空格。
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
输入例子:
180
输出例子:
2 2 3 3 5
质数有以下性质:
- 质数除2以外都是奇数;
- 奇数都能分解为奇质数的成绩;
也就是说任何一个数都能分解为有限个2和有限个奇质数的成绩,所以先把要求的数变为奇数,再把这个奇数逐层分解。
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
while (cin >> n){
int i;
while (n%2 == 0){
n /= 2;
cout << 2 << ' ';
}
//这里的平方根是一个优化。因为一个数一定有一个质数因子小于它的平方根,否则它本身就是一个质数,也就是下边if(n > 2)的情况
for (i = 3; i <= sqrt(n); i+=2){
while(n%i == 0){
n /= i;
cout << i << ' ';
}
}
if (n >2){
cout << n << ' ';
}
cout << endl;
}
return 0;
}