首先,你需要知道中国剩余定理(CRT)
解题思路
问两个大数(注意一定要互质),然后跑一遍中国剩余定理就行了。
注意:
开 long long;
交互题,要清空缓存;
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int q;
long long flag,flag2;
long long mod=4*1e8-1;
long long mod2=4*1e8-2;
long long s;
long long m1,m2;
long long ny1,ny2;
long long n;
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0;
return a;
}
int r=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>q;
n=mod*mod2;
while(q--)
{
cout<<"? "<<mod<<endl;
cin>>flag;
cout<<"? "<<mod2<<endl;
cin>>flag2;
m1=mod2;m2=mod;
long long x,y;
exgcd(m1,mod,x,y);
ny1=x;
exgcd(m2,mod2,x,y);
ny2=x;
long long ans=0;
ans=(ans+flag*m1*ny1%n);
ans=(ans+flag2*m2*ny2%n);
if(ans>=0)
ans=ans%n;
else
ans=(ans+n)%n;
cout<<"! "<<ans<<endl;
}
return 0;
}