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