HDU 2964 Prime Bases 数论 水

View Code
#include<cstdio>
#include<cstring>
int p[15] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int a[15];
int main()
{
    int i, j, k, n;
    while( ~scanf("%d", &n) && n) 
    {
        printf("%d = ", n);
        int s = 1;    
        for(i = 0; i < 13; i++)
        {
            s *= p[i];
            if(i < 13 && (__int64)s * p[i+1] > (__int64)n )
                break;
        }
        j = i; 
        memset(a, 0, sizeof(a)); // pay attention;
        while(n)
        {
            a[i] = n/s;
            n -= a[i]*s;
            s /= p[i--];
        }
        bool flag = 0;
        for(i = 0; i <= j; i++)
        {
            if(!a[i]) continue; 
            if(!i) {flag = 1, printf("%d", a[0]); continue; }
            if(flag)
                printf(" + ");
            else 
                flag = 1;
            printf("%d", a[i]);
            for(k = 1; k <= i; k++)
                printf("*%d", p[k]);
        }
        puts("");
    }
    return 0;
}
posted @ 2012-12-03 21:40  To be an ACMan  Views(213)  Comments(0)    收藏  举报