Code: Select all
#include<stdio.h>
#include<math.h>
long long prime[3550],flag[10000],c=0,a[100000000];
void seive(int n)
{
long long k,i,j,r;
k=sqrt(n);
for(i=1;i<=n;i++)
flag[i]=0;
flag[1]=1;
prime[0]=2;
c=1;
for(i=4;i<=n;i+=2)
flag[i]=1;
for(i=3;i<=n;i+=2)
{
if(flag[i]==0)
{
prime[c++]=i;
if(k>=i)
{
r=i+i;
for(j=i*i;j<=n;j+=r)
flag[j]=1;
}
}
}
}
int main()
{
long long n,i,j,x;
while(scanf("%lld",&n)==1)
{
if(n==0)
break;
else if(n==1)
{
printf("1 =\n");
continue;
}
x=n;
i=0;
if(n<0)
{
a[i]=-1;
i++;
n=n*(-1);
}
seive(n);
for(j=0;j<c;)
{
if(n%prime[j]==0)
{
a[i++]=prime[j];
n=n/prime[j];
}
else j++;
}
printf("%lld = %lld",x,a[0]);
for(j=1;j<i;j++)
printf(" x %lld",a[j]);
printf("\n");
}
}