#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
struct Factor{
int x,cnt;
};
Factor factor;
Factor fac[10];//存储分解的质因数
int prime[maxn],p_num=0;//存储质数
int num;//准备分解的数
int number = 0;//不同质因数的个数
bool is_prime(int n)
{
if(n==1) return false;
int sqr = (int)sqrt(n*1.0);
for(int i=2;i<=sqr;i++)
if(n%i==0) return false;
return true;
}
void get_prime()
{
for(int i=2;i<maxn;i++)
if(is_prime(i))
prime[p_num++]=i;
}
void get_num()
{
cin>>num;
}
void disassemble(int n)
{
int sqr = (int)sqrt(n*1.0);
for(int i=0;i<p_num&&prime[i]<=sqr;i++)
{
if(n%prime[i]==0)
{
fac[number].x = prime[i];
fac[number].cnt = 0;
while(n%prime[i]==0)
{
fac[number].cnt++;
n/=prime[i];
}
number++;
}
if(n==1) break;
}
if(n!=1)
fac[number].x = n,fac[number].cnt = 1;
}
void print()
{
cout<<num<<"="<<fac[0].x;
for(int j=2;j<=fac[0].cnt;j++)
cout<<"x"<<fac[0].x;
for(int i=1;i<number;i++)
for(int j=1;j<=fac[i].cnt;j++)
cout<<"x"<<fac[i].x;
}
int main()
{
get_prime();
get_num();
disassemble(num);
print();
return 0;
}
注意:
分解根据的原理是:
对于一个正整数n来说,如果存在[2,n]范围内的质因子,那么这些质因子全部小于sqrt(n),或者最多只存在一个大于sqrt(n)的质因数。显然不可能会有两个这样的数否则想乘会大于n。