hdu2189
说实话第一眼不知道怎么做 然后百度下。。。看到了母函数三个字。。。。果断A了
代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #include <string.h> 5 6 int main() 7 { 8 int prime[150], i, j, k, m, t, e, a[200], b[200], c[200], n; 9 int judge( int x ); 10 11 for( t = 0, j = 2; j <= 150; j ++ ) 12 { 13 if( judge( j ) ) 14 prime[t++] = j; 15 } 16 17 scanf( "%d", &e ); 18 19 while( e -- ) 20 { 21 scanf( "%d", &n ); 22 23 memset( a, 0, 200 * sizeof( int ) ); 24 memset( b, 0, 200 * sizeof( int ) ); 25 memset( c, 0, 200 * sizeof( int ) ); 26 27 for( i = 0; i * 2 <= n; i ++ ) 28 a[i*2] = 1; 29 30 for( i = 1; i < t; i ++ ) 31 { 32 for( k = 0; k * prime[i] <= n; k ++ ) 33 b[k*prime[i]] = 1; 34 for( k = 0; k <= n; k ++ ) 35 { 36 for( m = 0; m <= n; m ++ ) 37 c[m+k] += a[k] * b[m]; 38 } 39 for( k = 0; k <= n; k ++ ) 40 a[k] = c[k]; 41 memset( c, 0, 200 * sizeof( int ) ); 42 memset( b, 0, 200 * sizeof( int ) ); 43 } 44 45 printf( "%d\n", a[n] ); 46 } 47 return 0; 48 } 49 int judge( int x ) 50 { 51 int i; 52 for( i = 2; i <= sqrt( x ); i ++ ) 53 { 54 if( x % i == 0 ) 55 { 56 return 0; 57 } 58 } 59 return 1; 60 }