给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式 N=p1k1⋅p2k2⋯pmkm。
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即 N=p1^k1*p2^k2*…*pm^km
,其中pi
为素因子并要求由小到大输出,指数ki
为pi
的个数;当ki
为1即因子pi
只有一个时不输出ki
。
输入样例:
1323
输出样例:
1323=3^3*7^2
#include<iostream>
#include<cmath>
using namespace std;
bool prime(int n) //判断是否为素组
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)return false;
return true;
}
int main()
{
long int N;
int m[1000]={0},flag=0,i=1,count=1;
cin>>N;
cout<<N<<"=";
if(N==1){cout<<1;return 0;} //当N=1时,要直接列出来
while(1)
{
N/=i;
if(N<=1)break;
for(i=2;;i++)
if(N%i==0&&prime(i))
{
m[flag++]=i; //因为每次循环都是从2开始,所以存放在数组的顺序是从小到大的
break;
}
}
flag=0; //上面flag用完,这时flag可以用来判断因子是否为第一项
for(int j=0;m[j]!=0;j++)
{
if(m[j+1]==m[j])count++;
else
{
if(flag!=0)cout<<"*";
else flag++;
if(count==1)cout<<m[j];
else cout<<m[j]<<"^"<<count;
count=1;
}
}
return 0;
}