题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
最后一个数后面也要有空格
输入描述:输入一个long型整数
输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
输入:180
输出:2 2 3 3 5
解题思路:剑指Offer上有,假设输入N,则从2到N/2,以此看是否能被整除,如果能一个数比如2整除,则一直判断是否能够整除。
解题代码:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
long int input;
//方法一
//while (cin >> input)
//{
// while (input != 1)
// {
// for (int i = 2; i <= input; i++)
// {
// if (input % i == 0)
// {
// input /= i;
// cout << i << ' ';
// break; //只要能被i整除,i总是从2开始
// }
// }
// }
//}
//方法二
//while (cin >> input)
//{
// for (int i = 2; i <= input; i++)
// {
// //只要能被i整除,i总是从2开始
// if (input%i == 0)
// {
// input /= i;
// cout << i << " ";
// i = 1;//经i++之后 i又变为2开始
// }
// }
//}
//方法三
while (cin >> input)
{
for (int i = 2; i<= input/2; i++)
{
//此处是while,把a整除结束才可加1
while (input%i == 0)
{
cout << i << ' ';
input = input / i;
}
}
if (input>1) //这一句很重要,如果该数本身就是质数,直接输出,如17等
cout << input << ' ';
}
//system("pause");
return 0;
}