hdu 1164 Eddy's research I(求素数因子,素数筛法模板)
#include <stdio.h>
#include <string.h>
#define MAXN 65543
bool flag[MAXN];
int prime[MAXN/2];
void get_prime(int &k)
{
memset(flag,true,sizeof(flag));
int i,j;
for(i=2; i<MAXN; i++)
{
if(flag[i]) prime[k++] = i;
for( j=0; j < k && i*prime[j] < MAXN ; j++ )
{
flag[ i*prime[j] ] = false;
if( i % prime[j] == 0 ) break;
}
}
}
/*
void get_prime(int &k)
{
int i,j,lim;
for(i=2; i<MAXN; i++)
{
if(!flag[i]) prime[k++] = i;
lim = MAXN / i;
for( j=i; j <lim ; j++ )
{
flag[ i*j ] = true;
}
}
}
*/
void solve(int n,const int k)
{
int i;
bool first = true;
for(i=0; i<k; i++)
{
while( n % prime[i] == 0 )
{
if( first )
{
printf("%d",prime[i]);
first = false;
}
else printf("*%d",prime[i]);
n /= prime[i];
}
}
printf("\n");
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("tdata.txt","r",stdin);
#endif
int n,k=0;
get_prime(k);
while(scanf("%d",&n)!=EOF)
{
solve(n,k);
}
return 0;
}