问题描述
设计算法,用户输入合数,程序输出若个素数的乘积。
输入格式
一个整数
输出格式
若干个素数的乘积
样例输入
120
样例输出 (实际输出并没有空格)
2 * 2 * 2 * 3 * 5
数据范围
输入数据中每一个数在 int 表示范围内。
题解
分解质因数:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
bool flag = true; // 用来判断是否加 '*'
for (int j = 2; j <= n / j; j ++)
while(n % j == 0) // j 必然为质数
{
n /= j;
if(flag) // 前面有 '*',直接输出质因子
{
cout << j;
flag = false;
}
else cout << "*" << j;
}
if(n > 1 && flag) cout << n; // 唯一大于 sqrt(n) 的质因子
else if(n > 1 && !flag) cout << "*" << n;
return 0;
}