分解质因数。注意如果输入为1,是要输出1=1的。
#include<cstdio>
long long n;
long long prime[10000]={0},cnt=0;
int num[10000]={0};
void func(){
long long m=n,i;
for(i=2;i*i<=m;i++){
if(m%i==0){
prime[cnt]=i;
while(m%i==0){
m/=i;
num[cnt]++;
}
cnt++;
}
}
if(m>1){
prime[cnt]=m;
num[cnt]=1;
cnt++;
}
}
void oupu(){
int i;
printf("%lld=",n);
if(cnt==0){
printf("1\n");
return;
}
for(i=0;i<cnt;i++){
printf("%lld",prime[i]);
if(num[i]>1){
printf("^%d",num[i]);
}
if(i<cnt-1)printf("*");
else printf("\n");
}
}
int main(){
scanf("%lld",&n);
func();
oupu();
return 0;
}