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
| #include<bits/stdc++.h> using namespace std; #define ll long long #define reg register int rem[29]; int pri[]={2,3,7,11,13,17,19,23,29}; ll n,a[16],m[16],Mi[16],mul=1,X; void exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){x=1;y=0;return ;} exgcd(b,a%b,x,y); int z=x;x=y,y=z-y*(a/b); } inline void solve(){ for(int i=1;i<=29;++i){ cout<<"? "<<i<<' '<<1293938646+i<<endl; fflush(stdout); int x;cin>>x;fflush(stdin); for(int j=0;j<9;++j)if(x%pri[j]==0)rem[j]=pri[j]-(i%pri[j]); } n=9;mul=1;memset(m,0,sizeof(m));X=0;memset(Mi,0,sizeof(Mi)); for(int t=1;t<=n;++t){ m[t]=pri[t-1]; mul*=m[t]; a[t]=rem[t-1]; } for(int t=1;t<=n;++t){ Mi[t]=mul/m[t]; ll x=0,y=0; exgcd(Mi[t],m[t],x,y); X+=a[t]*Mi[t]*(x<0?x+m[t]:x); } cout<<"! "<<X%mul<<'\n'; } int main(){
int T=1; cin>>T; for(;T--;)solve(); return (0-0); }
|