标签:
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 }
标签:
原文地址:http://www.cnblogs.com/shenbingyu/p/4937279.html