[cf] 752 div2 D. Moderate Modular Mode

前言

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 xy

  • 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 kx+p
    我们可以通过 y − y % x y-y\%x yy%x获得 k ∗ x k*x kx
    同时又要使得答案 < y <y <y则我们应该取 y − y % x / 2 y-y\%x/2 yy%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 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值