//Jakub Nowak XIV LO Wroclaw #include<bits/stdc++.h> using namespace std; #define boost ios_base::sync_with_stdio(false); cin.tie(0); #define int long long #define vi vector<int> #define pii pair<int,int> #define pb push_back #define st first #define nd second const int inf = (int)(1e18)+7; const int mod = 1e9 + 7; const int max_n = 4e6; const int r = 2137; #include "dzilib.h" void solve() { int n = GetN(); int q = GetQ(); int c = GetC(); vector<vector<pii>> T(max_n+1, vector<pii>(0)); vector<vi> M(max_n, vi(0)); vi LICZBA_DZIELNIKOW(max_n, 1); for(int i=2; i<=max_n; i++) { if(T[i].empty()) { for(int j=i; j<=max_n; j+=i) T[j].pb({i, 1}); for(int x = i*i; x<=max_n; x*=i) { for(int j=x; j<=max_n; j+=x) T[j].back().nd++; } } int liczba_dzielnikow = 1; for(auto &u : T[i]) liczba_dzielnikow*= u.nd; M[liczba_dzielnikow].pb(i); LICZBA_DZIELNIKOW[i] = liczba_dzielnikow; } function<bool(int)> check = [&](int x) { for(int i=1; i<=1000; i++) { if(Ask(r+i) != LICZBA_DZIELNIKOW[x+i]) return false; } return true; }; int l = Ask(0); for(auto u:M[l]) { if(check(u)) { Answer(u); return; } } //cout << -1 << "\n"; Answer(-1); } int32_t main() { boost int t = GetT(); while(t--) solve(); }
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 | //Jakub Nowak XIV LO Wroclaw #include<bits/stdc++.h> using namespace std; #define boost ios_base::sync_with_stdio(false); cin.tie(0); #define int long long #define vi vector<int> #define pii pair<int,int> #define pb push_back #define st first #define nd second const int inf = (int)(1e18)+7; const int mod = 1e9 + 7; const int max_n = 4e6; const int r = 2137; #include "dzilib.h" void solve() { int n = GetN(); int q = GetQ(); int c = GetC(); vector<vector<pii>> T(max_n+1, vector<pii>(0)); vector<vi> M(max_n, vi(0)); vi LICZBA_DZIELNIKOW(max_n, 1); for(int i=2; i<=max_n; i++) { if(T[i].empty()) { for(int j=i; j<=max_n; j+=i) T[j].pb({i, 1}); for(int x = i*i; x<=max_n; x*=i) { for(int j=x; j<=max_n; j+=x) T[j].back().nd++; } } int liczba_dzielnikow = 1; for(auto &u : T[i]) liczba_dzielnikow*= u.nd; M[liczba_dzielnikow].pb(i); LICZBA_DZIELNIKOW[i] = liczba_dzielnikow; } function<bool(int)> check = [&](int x) { for(int i=1; i<=1000; i++) { if(Ask(r+i) != LICZBA_DZIELNIKOW[x+i]) return false; } return true; }; int l = Ask(0); for(auto u:M[l]) { if(check(u)) { Answer(u); return; } } //cout << -1 << "\n"; Answer(-1); } int32_t main() { boost int t = GetT(); while(t--) solve(); } |