题目:给一个整数n,在满足 gcd(𝑥,𝑦)=𝑛,𝑥≠𝑦且1≤𝑥,𝑦<263的基础上,使得x⊕y最小。
知识点:数学
思路:
首先x=na,y=nb,gcd(a,b)=1,|a-b|>=1,因为n|a-b|>=n,即|x-y|>=n,又因为|x-y|<=x⊕y,所以x⊕y的最小值为n。(光算样例也能得到) 如何保证x⊕y的最小值为n?因为n(1≤n<2 31),所以我们创造一个k为n左移位31位,x=nk,y=nk+n,这样左移位的值归零,只剩下y后的n.
代码:
using namespace std;
#define int long long
void slove() {
int n; cin>>n;
int k=1LL<<31;
int x,y;
x=n*k;
y=n*(k+1);
cout<<x<<' '<<y<<endl;
}
signed main() {
int t;cin>>t;
while(t--) {
slove();
}
}

京公网安备 11010502036488号