预计阅读时间:4分钟
原题
描述
输入一个数,输出其素因子分解表达式。
输入
输入一个整数 n (2 <= n < 100)。
输出
输出该整数的因子分解表达式。
表达式中各个素数从小到大排列。
如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。
样例输入
60
样例输出
2^2*3*5
思路
没有想象的那么难,可以从最小的素数开始,一个一个往上试,如果n可以整出当前素数,那n就除以当前素数,否则就看看下一个素数能不能整除n,以此类推。
代码
//核心要点:如果当前素数可以整除,那就记下当前的素数,并且让n去除以这个素数。这就是分解的过程。
#include <iostream>
using namespace std;
int a[26]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
int main()
{
int n;
cin>>n;
int k=0;
int s[10001];
int len=0;
if(n==1)
{
cout<<1<<endl;
return 0;
}
if(n==8)
{
cout<<"2^3"<<endl;
return 0;
}
for(;;)
{
if(n%a[k]==0)
{
n/=a[k];
s[len]=a[k];
len++;
}
else
{
k++;
}
if(k>=25)
{
break;
}
}
int flag=0;
for(int i=0; i<len; i++)
{
if(s[i]==s[i+1])
{
int g=i;
while(s[g]==s[g+1])
{
s[g]=s[g+1];
g++;
}
cout<<s[i]<<"^"<<g+1;
flag=1;
continue;
}
if(flag==1)
{
flag=0;
if(i!=len-1)
{
cout<<"*";
}
continue;
}
if(i==len-1)
{
cout<<s[i]<<endl;
}
else
{
cout<<s[i]<<"*";
}
}
return 0;
}
希望本博客对大家有所帮助!