[HIHO]DIvide Product

Divided Product

题解

 1 #include <iostream>
 2 
 3 using namespace std;
 4 //  f[0][0][1] = 1;
 5 // for (i = 0; i < N; i++)
 6 //     for (j = 0; j < N; j++)
 7 //         for (k = 1; k <= M; k++)
 8 //             if (f[i][j][k] > 0)
 9 //                 for (l = j + 1; l <= N - i; l++)
10 //                     f[i + l][l][gcd[l * k]] = (f[i + l][l][gcd[l * k]] + f[i][j][k]) % 1000000007;
11 // k = 0;
12 // for (i = 1; i <= N; i++)
13 //     k = (k + f[N][i]     [M]) % 1000000007;
14 int N, M;
15 int cnt;
16 int gcd(int a,int b)
17 {
18      return b==0?a:gcd(b,a%b);
19 }
20 int main()
21 {
22     cin >> N >> M;
23     cnt = 0;
24     int f[N+1][N+1][M+1];
25     for (int i =0;i<=N;++i)
26         for (int j =0;j<=N;++j)
27             for(int k =0;k<=M;++k)
28                 f[i][j][k] = 0;
29     f[0][0][1] = 1;
30     for(int i =0;i<=N;++i)
31         for(int j=0;j<=N;++j)
32             for(int k =0;k<=M;++k)
33                 if(f[i][j][k]>0)
34                     for(int l=j+1;l<=N-i;++l)
35                         f[i+l][l][gcd(l*k,M)] = (f[i][j][k] + f[i+l][l][gcd(l*k,M)]) % 1000000007;
36 
37     int k = 0;
38     for(int i=0;i<=N;++i){
39         k = (k + f[N][i][M]) % 1000000007;
40         //    cout << f[N][i][M] <<endl;
41     }
42        cout << k << endl;
43     return 0;
44 }

 

posted @ 2015-11-04 20:33  byshen  阅读(151)  评论(0编辑  收藏  举报