标签:
3 10
11
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn = 52; 5 LL c[maxn][maxn]; 6 int p[] = {2,3,5,7,11,13,17,19,23,29}; 7 void init() { 8 c[0][0] = 1; 9 for(int i = 1; i < maxn; ++i) { 10 c[i][0] = c[i][i] = 1; 11 for(int j = 1; j < i; ++j) 12 c[i][j] = c[i-1][j] + c[i-1][j-1]; 13 } 14 } 15 int main() { 16 init(); 17 int k,s; 18 while(~scanf("%d%d",&k,&s)) { 19 LL ret = 0; 20 for(int i = 0; i < 10; ++i) { 21 if(s/p[i] < k) { 22 for(int j = 1; j < (1<<i); ++j) { 23 int cnt = 0; 24 LL tmp = 1; 25 for(int t = 0; t < i; ++t) { 26 if((j>>t)&1) { 27 cnt++; 28 tmp *= p[t]; 29 } 30 } 31 if(cnt&1) ret += c[s/tmp][k]; 32 else ret -= c[s/tmp][k]; 33 } 34 break; 35 } 36 } 37 printf("%I64d\n",ret > 10000?10000:ret); 38 } 39 return 0; 40 }
标签:
原文地址:http://www.cnblogs.com/crackpotisback/p/4847292.html