前言
t
a
g
:
tag :
tag: 数学
取模
*1600
传送门 :
题意 :
给定
x
,
y
x,y
x,y询问是否可以找到一个数
n
n
n使得
n
%
x
=
=
y
%
n
n\%x==y\%n
n%x==y%n
思路 :
因为
%
\%
%本身的性质,我们先对结果进行分类讨论
-
x = = y x==y x==y
答案显然就是 x ∣ ∣ y x||y x∣∣y -
x > y x>y x>y
我们考虑 y = y y=y y=y
因为 x > y x>y x>y的缘故, n % x = y n\%x=y n%x=y则 n = x + y n=x+y n=x+y,显然这个结果同时满足 y % ( x + y ) = y y\%(x+y)=y y%(x+y)=y -
x < y x<y x<y
首先这个答案必然在 x , y x,y x,y之间
因此这个答案必然是 k ∗ x + p k*x+p k∗x+p
我们可以通过 y − y % x y-y\%x y−y%x获得 k ∗ x k*x k∗x
同时又要使得答案 < y <y <y则我们应该取 y − y % x / 2 y-y\%x/2 y−y%x/2
code :
int x,y;
void check(int n){
if(n%x == y%n){
cout<<"YES"<<endl;
}
}
void solve(){
cin>>x>>y;
if(x == y){
//check(x);
cout<<x<<endl;
}else if(x>y) {
//check(x+y);
cout<<x+y<<endl;
}else{
//check(y-y%x/2);
cout<<y-y%x/2<<endl;
}
}
int main(){
int t;cin>>t;while(t--)
solve();
return 0 ;
}