一、题目描述
质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
把一个合数分解成若干个因数乘积的形式(即求质因数的过程)叫做分解质因数。分解质因数(也称分解素因数)只针对于合数
现在给出一个正整数n,将n分解成质因数乘积的形式
输入输出样例:
输入:
36
输出:
36 = 2 * 2 * 3 * 3
二、题意分析
将任意的n
分解为质因数的乘积,要从最小的质数2
开始,从2
开始试除,能整除,就输出2
,再对商继续试除,… ,再用下一个质数试除,… ,直到商为1
,停止操作。
这里,质因数的递增,是一层循环,每一个质因数的试除,又是一层循环。因此,本题使用两层循环实现。
三、代码实现
#include <iostream>
using namespace std;
int main()
{
int n, i = 2;
cin >> n;
cout << n << "=";
//do {
// while (n % i == 0) {
// cout << i;
// n = n / i;
// if (n != 1) cout << "*";
// }
// i++;
//} while (n != 1);
for (int i = 2; n != 1; i++)
{
while (n % i == 0)
{
cout << i;
n = n/i;
if (n != 1)
{
cout << "*";
}
}
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n,i;
cin>>n;
cout<<n<<"=";
while(n>1)
{
i=2;
while(n%i!=0)
i++;
cout<<i;
n/=i;
if(n!=1)
cout<<"*";
}
return 0;
}
附加题:找出100以内的质数
#include <iostream>
using namespace std;
int main()
{
for (int i = 2; i < 100; i++)
{
for (int j = 2; j <= i; j++)
{
if (j == i)
{
cout << i << " ";
}
if (i % j == 0)
{
break;
}
}
}
return 0;
}
时间复杂度:O(sqrt(n))
空间复杂度:O(1)