首先观察样例可以猜出x⊕y最小值为n,下面给出证明。由于异或运算可以看成是不带退位的减法,所以|x−y|<=x⊕y。又由于gcd(x,y)=n,所以x,y可分别看成n* a,n* b,a,b需互质所以,|x−y|=|a-b|*n,a,b互质最小差值为1。所以得证x⊕y最小值为n。
对于如何构造出x,y,我们只需将n看成二进制,将其左移m位,即末尾补m个0,即构造x=n*(2^k),由上段构造y=n*(2^k+1)。y的二进制就是x的m个0处加上一个n的二进制,所以可得想要x⊕y=n,需满足n的二进制位数<=m。由题n<2^31,可知n二进制最多31位,所以k即m取31即可。
附本人ac码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
#define mod 998244353
const ll N=1e6+10;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
cout<<(n<<31)<<" "<<(n<<31)+n<<endl;
}
return 0;
}

京公网安备 11010502036488号