#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
//数组都放在外面
const int MAXN=10010;
bool isprime[MAXN]={0};//判断是否是素数
//int
typedef struct{
int n,c;
}yinzi1;
yinzi1 yinzi[10];
int yzct=0;
int main() {
int i=2;
int j;
memset(isprime,1,sizeof(isprime));
memset(yinzi,-1,sizeof(yinzi));
//打素数表
for(i=2;i<MAXN;i++){
for(j=2;j*i<MAXN;j++){
isprime[j*i]=0;
}
}
//****************
int N;
scanf("%d",&N);
//1单独处理
if(N==1){
printf("1=1");
return 0;
}
else printf("%d=",N);
//
j=1;
int flag=0;
// int maxj=(int)sqrt(N); //枚举到根号N的质因数即可
while(N>1){
while(j<MAXN&&isprime[++j]==0);//找素数表里下一个素数
flag=0;
while(N%j==0){
flag=1;
// if(N%j==0){
if(yinzi[yzct].n==-1){//未被赋值过
yinzi[yzct].n=j;
yinzi[yzct].c=1;
}
else {
yinzi[yzct].c++;
}
N/=j;
}
if(flag)yzct++;//如果执行了上面的循环,就结构体数组++;
}
// }
//****************************
//输入输出控制
if(N==1){
for(int i=0;i<yzct;i++){
// for(int j=0;j<yinzi[i].c;j++){
if(yinzi[i].c>1){
printf("%d^%d",yinzi[i].n,yinzi[i].c);
}
else if(yinzi[i].c==1){
printf("%d",yinzi[i].n);
}
if(i<yzct-1)printf("*");
// printf("%d",yinzi[i].n);
// if(j<yinzi[i].c-1)printf("*");
// }
}
}
else{
printf("%d",N);
}
return 0;
}
07-25