输入一个数,输出其素因子分解表达式。
【输入】
输入一个整数 n (2≤n<100)。
【输出】
输出该整数的因子分解表达式。
表达式中各个素数从小到大排列。
如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。
【输入样例】
60【输出样例】
2^235
思路
需要的函数 素数判断
用递归法不断拆分,将其拆分为最小素数相乘,将每一个素数因子存入数组中,然后对数组排序,再将重复因子变为次方的形式。
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100];
int k=0;
int pp(int n)
{
if(n==2) return 1;
if(n==3) return 1;
for(int i=2;i*i<=n;i++)
{
if(n%i==0) return 0;
}
return 1;
}
void p(int n)
{
if(pp(n)) {a[k++]=n;return ;}
for(int i=2;i*i<=n;i++)
{
int t=0;
// if(pp(n)) {a[k++]=n;return ;}
if(n%i==0)
{ t=1;
if(pp(i))
{a[k++]=i;
p(n/i);}
else p(i);
}
if(t==1) return ;
}
}
int main()
{
int n;
cin>>n;
if(pp(n)) {cout<<n;return 0;}
p(n);
/* for(int i=0;i<k;i++)
{
cout<<a[i];
}*/
//cout<<endl;
sort(a,a+k);
/* for(int i=0;i<k;i++)
{
cout<<a[i];
}*/
// cout<<endl;
int c=1;
for(int t=0;t<k;t++)
{
if(a[t]==a[t+1]) c++;
else
{
if(c==1)
{
printf("%d",a[t]);
if(a[t+1]) printf("*");
}
else
{
printf("%d^%d",a[t],c);
if(a[t+1]) printf("*");
}
c=1;
}
}
return 0;
}