// Przykładowe niepoprawne rozwiązanie do zadania Dzielniki. #include "dzilib.h" #include "bits/stdc++.h" using namespace std; int num_of_divisors(int n){ int res = 2; int i; for(i=2; i*i<n; i++) if(n%i == 0) res+=2; if(i*i == n) res++; return res; } vector<int> sieve(int n){ vector<int> S(2*n, true); S[0] = S[1] = false; vector<int> ans; for(int i=2; i<=n; i++){ if(S[i]){ ans.push_back(i); for(int j=i; j<2*n; j+=i) S[j] = false; } } for(int i=n+1; i<2*n; i++) if(S[i]){ ans.push_back(i); return ans; } } int main() { int t = GetT(); int q = GetQ(); long long c = GetC(); long long n = GetN(); vector<int> primes = sieve(n); vector<int> d(n+1); map<vector<int>, int> tmp; tmp[{1}] = 69; for(auto p : primes){ vector<int> A; for(int j=0; j<0+13; j++) A.push_back(num_of_divisors(p+j)); tmp[A] = p; } while(t--) { cerr << t << '\n'; int k = 0; while(Ask(k) != 2) k++; vector<int> B; for(int i=0; i<13; i++){ B.push_back(Ask(k+i)); } int pierwsza = tmp[B]; Answer(pierwsza - k); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | // Przykładowe niepoprawne rozwiązanie do zadania Dzielniki. #include "dzilib.h" #include "bits/stdc++.h" using namespace std; int num_of_divisors(int n){ int res = 2; int i; for(i=2; i*i<n; i++) if(n%i == 0) res+=2; if(i*i == n) res++; return res; } vector<int> sieve(int n){ vector<int> S(2*n, true); S[0] = S[1] = false; vector<int> ans; for(int i=2; i<=n; i++){ if(S[i]){ ans.push_back(i); for(int j=i; j<2*n; j+=i) S[j] = false; } } for(int i=n+1; i<2*n; i++) if(S[i]){ ans.push_back(i); return ans; } } int main() { int t = GetT(); int q = GetQ(); long long c = GetC(); long long n = GetN(); vector<int> primes = sieve(n); vector<int> d(n+1); map<vector<int>, int> tmp; tmp[{1}] = 69; for(auto p : primes){ vector<int> A; for(int j=0; j<0+13; j++) A.push_back(num_of_divisors(p+j)); tmp[A] = p; } while(t--) { cerr << t << '\n'; int k = 0; while(Ask(k) != 2) k++; vector<int> B; for(int i=0; i<13; i++){ B.push_back(Ask(k+i)); } int pierwsza = tmp[B]; Answer(pierwsza - k); } return 0; } |