#include <cstdio>
#include <cmath>
#include <cstring>
#include <bits/stdc++.h>
using namespace std;
int vis[10000],prime[10000];
int a[100],b[100];
int main()
{
int i,j,n,len=0,num,m;
n = 10000;
memset(prime,0,sizeof(prime));
memset(vis,0,sizeof(vis));
for(i=2;i<=n;i++) //找素数
{
if(vis[i]==0)
{
prime[len]=i;
len++;
for(j=i*i;j<=n;j+=i)
{
vis[j] = 1;
}
}
}
int top=0;
prime[0]=2;
while(scanf("%d",&num)!=EOF) //唯一分解定理
{
m=num;
top=0;
for(i=0;prime[i]<m;i++)
{
if(num%prime[i]==0)
{
a[top]=prime[i];
b[top]=0;
while(num%prime[i]==0)
{
b[top]++;
num/=prime[i];
}
top++;
}
}
printf("%d=",m);
for(i=0;i<top;i++)
{
printf("%d^%d",a[i],b[i]);
if(i<top-1)
printf("*");
}
}
return 0;
}
#include <cmath>
#include <cstring>
#include <bits/stdc++.h>
using namespace std;
int vis[10000],prime[10000];
int a[100],b[100];
int main()
{
int i,j,n,len=0,num,m;
n = 10000;
memset(prime,0,sizeof(prime));
memset(vis,0,sizeof(vis));
for(i=2;i<=n;i++) //找素数
{
if(vis[i]==0)
{
prime[len]=i;
len++;
for(j=i*i;j<=n;j+=i)
{
vis[j] = 1;
}
}
}
int top=0;
prime[0]=2;
while(scanf("%d",&num)!=EOF) //唯一分解定理
{
m=num;
top=0;
for(i=0;prime[i]<m;i++)
{
if(num%prime[i]==0)
{
a[top]=prime[i];
b[top]=0;
while(num%prime[i]==0)
{
b[top]++;
num/=prime[i];
}
top++;
}
}
printf("%d=",m);
for(i=0;i<top;i++)
{
printf("%d^%d",a[i],b[i]);
if(i<top-1)
printf("*");
}
}
return 0;
}