/*
* 解题思路:
* 该题不难、重在打素数表就ok、
*/
#include <math.h>
#include <stdio.h>
int prim[ 105000 ],a[ 1000005 ];
int main( )
{
long long n;
int i,j,p,len = sqrt( 1000005 );
for( i=2;i<=len;i++ )
if( !a[ i ] )
for( j=i+i;j<=1000005;j+=i )
a[ j ] = -1;
for( i=2,p=0;i<=1000005;i++ )
if( !a[ i ] )
prim[ p++ ] = i;
while( scanf("%lld",&n) && n!=-1 )
{
for( i=0;i<p && prim[ i ] * prim[ i ] <=n ;i++ )
while( n%prim[ i ] == 0 )
{
n/=prim[ i ];
printf(" %d\n",prim[ i ] );
}
if (n > 1)
printf(" %lld\n",n);
puts("");
}
return 0;
}原文:http://blog.csdn.net/u011886588/article/details/19514431