#include<iostream>
#include<math.h>
using namespace std;
bool isprime[1000001];
int prime[80000];
int num=0;
void getPrime() //用筛选法求算素数
{
int i,j;
for(i=0;i<1000001;i++)
{
isprime[i]=true;
}
for(i=2;i<=1000;i++) //如果isprime[i]==true,即i是素数,那么i,2*i,3*i必定不是素数
{
for(j=i+i;j<=1000000;j+=i)
{
if(isprime[i]==true)
isprime[j]=false;
}
}
for(i=2;i<1000001;i++)
{
if(isprime[i]==true)
{
prime[num++]=i;
}
}
}
int count(int n,int k) //求n!中含有某因子k的个数
{
int num=0;
while(n)
{
num+=n/k;
n=n/k;
}
return num;
}
int main(void)
{
int n;
getPrime();
while(scanf("%d",&n)==1&&(n>1&&n<=1000000))
{
int i,j;
int m;
for(i=0;i<num;i++)
{
if(prime[i]>n)
break;
}
printf("%d=",n);
for(j=0;j<i-1;j++)
{
m=count(n,prime[j]);
if(m>1)
printf("%d^%d*",prime[j],m);
else
printf("%d*",prime[j]);
}
m=count(n,prime[j]);
if(m>1)
printf("%d^%d\n",prime[j],m);
else
printf("%d\n",prime[j]);
}
return 0;
}
|