?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
187510847 |
Practice: DaiRuiChen007 |
1665D - 37 | C++14 (GCC 6-32) | Accepted | 374 ms | 168 KB | 2023-01-01 13:16:33 | 2023-01-01 13:16:33 |
// LUOGU_RID: 98442718 #include<bits/stdc++.h> #define int long long using namespace std; const int p[8]={3,7,11,13,17,19,23,29},MOD=646969323,LIM=1e9; int unit[8]; inline int read(int a,int b) { cout<<"? "<<a<<" "<<b<<endl; int ret; cin>>ret; return ret; } inline int crt(const vector <int> &r) { int ret=0; for(int i=0;i<8;++i) ret=(ret+unit[i]*r[i])%MOD; return ret; } inline void solve() { vector <int> r[8]; for(int i=0;i<8;++i) for(int j=0;j<p[i];++j) r[i].push_back(j); for(int t=0;t<29;++t) { vector <int> tmp(8); for(int i=0;i<8;++i) tmp[i]=(p[i]-r[i].back())%p[i]; int q=crt(tmp); if(!q) q+=MOD; int x=read(q,q+MOD); for(int i=0;i<8;++i) if(x%p[i]!=0) r[i].pop_back(); } vector <int> ans(8); for(int i=0;i<8;++i) ans[i]=r[i].back(); int d=crt(ans); int q=read((5-d%5)%5+5,(5-d%5)%5+10); if(q==1) cout<<"! "<<d+MOD<<endl; else cout<<"! "<<d<<endl; } signed main() { for(int i=0;i<8;++i) { int m=MOD/p[i]; for(int r=0;r<p[i];++r) { if(m*r%p[i]==1) { unit[i]=m*r; break; } } } int T; scanf("%lld",&T); while(T--) solve(); return 0; }
?
?
?
?