andre_joy

导航

hdu 2189

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2189

题意:中文……

mark:母函数求解。参见http://baike.baidu.com/view/2415279.htm

代码:

#include <stdio.h>
#include <string.h>

int a[35] = {2, 3, 5}, b[2][151];

int pd(int m)
{
    int i;
    for(i = 0; a[i]*a[i] <= m; i++)
        if(m%a[i] == 0) return 0;
    return 1;
}

int main()
{
    int c,n,m = 7;
    int i,j,k,gap = 2;
    for(i = 3; i < 35; m += gap)
    {
        if(pd(m)) a[i++] = m;
        gap = 6-gap;
    }
    for(i = 0; i < 151; i += 2)
        b[0][i]++;
    for(i = 1; i < 35; i++)
    {
        memset(b[i%2], 0, sizeof(b[0]));
        for(j = 0; j < 151; j++)
            if(b[!(i%2)][j])
                for(k = 0; k+j < 151; k += a[i])
                    b[i%2][k+j] += b[!(i%2)][j];
    }
    scanf("%d", &c);
    while(c-- && scanf("%d", &n))
        printf("%d\n", b[0][n]);
    return 0;
}

 

posted on 2012-07-12 00:02  andre_joy  阅读(177)  评论(0编辑  收藏  举报