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
#include <bits/stdc++.h>
using namespace std;
// Przykładowe niepoprawne rozwiązanie do zadania Dzielniki.
#include "dzilib.h"
int i,j,mp,k;
long long d,x,d2;
array<long long,2> w;
vector<int> dd;
int cc;
int pr;
vector<array<long long,2>> g,f;
int main() {
  int t = GetT();
  long long n = GetN();
  int q = GetQ();
  long long c = GetC();
  //2^13 *3^8 *5^6 *7^3 *11^2 *13 =453109168512000000
  while(t--) {
	  pr=2;
		if(c<1e17)
			mp=37;
		else
		mp=53;
		//mp=31;
		d=Ask(0);
		x=1;
		g.push_back({0,d});
		for(i=1;i<mp;i++) {
			f={};
			for(auto w:g) {
				//w=g[j];
				//cout << w[0] << ' ' << ' ' << x << ' '  << w[0]+x << '\n';
				dd={w[1]};
				for(j=1;j<pr;j++) {
					dd.push_back(Ask(w[0]+j*x));
				}
				cc=0;
				for(k=0;k<pr;k++)
					if (dd[k]%i==0)
					cc++;
				if(cc<pr-1) continue;					
				for(j=0;j<pr;j++) 
					if(dd[j]>i && ((dd[j]%i==0 && cc==pr) || (dd[j]%i!=0)))
					f.push_back({w[0]+j*x,dd[j]});					
			}
			g=f;
			x*=pr;
			//cout << g.size() << ' ' << i  << '\n';
		}
		for(auto w:f) 
			if(w[1]==mp) {
				//cout << "AAA" << (x-w[0]) << '\n';
				Answer(x-w[0]);
				break;
			}
	
  }
  return 0;
}