由于(4×108)2>1017,所以想到了这样的方法,思路大致就是:
得到mmodx和mmod(x+1)的值,通过比较它们俩之间的差直接计算出m的值。
下面是本蒟蒻提交的代码(#15,16 WA),希望各位大佬能指点……
#include <bits/stdc++.h>
using namespace std;
int T;
long long n1 = 39999999, n2 = 40000000, m1, m2, C;
int main() {
cin >> T;
for (int i = 1; i <= T; i++) {
cout << "? " << n1 << endl;
cin >> m1;
if (m1 == -1)return 0;
cout << "? " << n2 << endl;
cin >> m2;
if (m2 == -1)return 0;
if (m1 < m2) C = m1+n1-m2;
else C = m1-m2;
cout << "! " << (C*n2+m2)%(n1*n2) << endl;
}
return 0;
}
此外,之前联想到过中国剩余定理,可惜了解不深,也不会写。