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;
}

posted @ 2010-09-11 09:25  菜到不得鸟  阅读(316)  评论(0)    收藏  举报