// 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; } |
English