n:待分解的整数;
tot:不同的质因数的个数;
a a[i]表示第i个质因数的值;
b b[i]表示第i个质因数的指数;
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 1000000
using namespace std;
long long n;
long long a[maxn],b[maxn];
long long tot;
long long p[maxn],pp[maxn];
void prime(){
p[0]=p[1]=0;
for(int i=2;i<maxn;i++)
p[i]=1;
for(int i=2;i<maxn;i++)
if(p[i])
for(int j=i+i;j<maxn;j+=i)
p[j]=0;
}
void pprme(){
int sn=0;
for(int i=0;i<maxn;i++)
if(p[i])
pp[sn++]=i;
}
void factor(){
long long tmp,i,now;
tmp=(long long)((double)sqrt(n)+1);
now=n;
for(i=0;pp[i]<=tmp;++i){
if(now%pp[i]==0){
a[++tot]=pp[i];
b[tot]=0;
while(now%pp[i]==0){
++b[tot];
now/=pp[i];
}
}
}
if(now!=1){
a[++tot]=now;
b[tot]=1;
}
}
int main(){
int ca=1;
prime();
pprme();
while(cin>>n){
printf("Case %d:\n",ca++);
tot=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
factor();
printf("%lld = ",n);
for(int i=1;i<=tot-1;i++){
if(b[i]!=1)
cout<<a[i]<<"^"<<b[i];
else
cout<<a[i];
printf(" * ");
}
if(b[tot]!=1)
cout<<a[tot]<<"^"<<b[tot]<<endl;
else
cout<<a[tot]<<endl;
}
}