1404 - Prime k-tuple

54s的时限暴力吧!

View Code
 1 #include<cstdio>
 2 #include<vector>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 
 7 const int maxn = 45000;
 8 int prime[maxn], plen = 0;
 9 bool vis[maxn];
10 void mklist() {
11     memset(vis, 0, sizeof(vis));
12     plen = 0;
13     for(int i = 2; i * i < maxn; ++i) {
14         if(!vis[i]) {
15             for(int j = i; i * j < maxn; ++j) {
16                 vis[i * j] = true;
17             }
18         }
19     }
20     for(int i = 2; i < maxn; ++i) if(!vis[i]) prime[plen++] = i;
21 }
22 
23 bool test(int x) {
24     for(int i = 0; i < plen && prime[i] * prime[i] <= x; ++i) {
25         if(x % prime[i] == 0) return false;
26     }
27     return true;
28 }
29 
30 int main() {
31     mklist();
32     int T;
33     cin >> T;
34     for(int kase = 1; kase <= T; ++kase) {
35         int a, b, k, s;
36         vector<int> p;
37         cin >> a >> b >> k >> s;
38         for(int i = a; i <= b; ++i) {
39             if(test(i)) p.push_back(i);
40         }
41         int ans = 0;
42         for(int i = 0; i + k - 1 < p.size(); ++i) {
43             if(p[i + k - 1] - p[i] == s) ++ans;
44         }
45         cout << ans << endl;
46     }
47     return 0;
48 }

 

posted @ 2013-02-06 17:52  ACSeed  Views(102)  Comments(0)    收藏  举报