【URAL】1091 Tmutarakan Exams
生活随笔
收集整理的這篇文章主要介紹了
【URAL】1091 Tmutarakan Exams
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:取k個不同的數,每個數不超過s,問種數。
若kx1,kx2,...,kx3滿足條件,則x1,x2,...,x3必然滿足條件。
因此枚舉素數容斥,2*3*5*7>50,所以枚舉之多三層。
1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #define MAXN 60 5 typedef long long LL; 6 using namespace std; 7 bool p[MAXN]; 8 vector<int> prime; 9 LL C[MAXN][MAXN]; 10 void Init() { 11 int i, j; 12 memset(p, true, sizeof(p)); 13 for (i = 2; i < 10; i++) { 14 if (p[i]) { 15 for (j = i * i; j < MAXN; j += i) 16 p[j] = false; 17 } 18 } 19 prime.clear(); 20 for (i = 2; i < MAXN; i++) { 21 if (p[i]) 22 prime.push_back(i); 23 } 24 memset(C, 0, sizeof(C)); 25 for (i = 0; i < MAXN; i++) 26 C[i][0] = C[i][i] = 1; 27 for (i = 1; i < MAXN; i++) { 28 for (j = 1; j < i; j++) 29 C[i][j] = C[i - 1][j] + C[i - 1][j - 1]; 30 } 31 } 32 int main() { 33 LL ans; 34 int t, s, i, j, k; 35 Init(); 36 while (~scanf("%d%d", &t, &s)) { 37 for (ans = i = 0; i < (int) prime.size(); i++) 38 ans += C[s / prime[i]][t]; 39 for (i = 0; i < (int) prime.size(); i++) { 40 for (j = i + 1; j < (int) prime.size(); j++) 41 ans -= C[s / prime[i] / prime[j]][t]; 42 } 43 for (i = 0; i < (int) prime.size(); i++) { 44 for (j = i + 1; j < (int) prime.size(); j++) { 45 for (k = j + 1; k < (int) prime.size(); k++) 46 ans += C[s / prime[i] / prime[j] 47 / prime[k]][t]; 48 } 49 } 50 if (ans > 10000) 51 ans = 10000; 52 printf("%lld\n", ans); 53 } 54 return 0; 55 }
轉載于:https://www.cnblogs.com/DrunBee/archive/2012/09/06/2673539.html
總結
以上是生活随笔為你收集整理的【URAL】1091 Tmutarakan Exams的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我想网购瓶装琪宁黄体酮,请问,瓶装琪宁黄
- 下一篇: 4天升满级穆图