今天数学课上,桐桐学习了质数的知识:一个正整数如果只能被1和它本身整除,那么这个整数便是质数。桐桐就想:任意一个正整数是否都能分解成若干个质数相乘的形式呢?输入一个正整数n,把它分解成质因子相乘的形式,如果为质数则输出该数本身。如:36=2×2×3×3;19=19。你能帮助桐桐解决这个难题吗?
输入
输入一个正整数n(2≤n≤109)
输出
把它分解成质因子相乘的形式,如果为质数则输出该数本身,乘数从小到大输出。
样例输入 Copy
99
样例输出 Copy
99=3*3*11
思路:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int m=n,t=0,i;
for( i=2;i*i<=n;i++) //从2开始找因数
{
while(m%i==0) //若n是偶数,则会输出所有的2后再输出剩余的质数因子(从小到大,每个质数输完后,才会输出下一个质数)
{
t++;
if(t==1)cout<<n<<"="<<i;
else cout<<"*"<<i;
m=m/i;
}
}
if(m==n)cout<<n<<"="<<n<<endl; //n为质数,没有除了1和它本身的其它因子
else if(m>i-1)cout<<"*"<<m; //此时m为超出n/i部分的较大因子
return 0;
}