1.题目描述
小洛找了2个偶数x,y,想请你找一个数n,使得n % x = y % n。
输入
第一行一个整数t(1<=t<=10^5)
然后一共t行,每行包含两个数x和y,(2<=x,y<=10^9)
输出
对于每一个测试案例,输出一个数n,(1<=n<=2*10^8)满足以上要求,如果有多个数,任意输出一个即可。
输入样例
4
4 8
4 2
420 420
69420 42068
输出样例
4
10
420
9969128
提示
4%4 = 8%4
10%4 = 2 %10
420 % 420 = 420 % 420
2.问题分析
分情况讨论:
x > y:此时容易想到(x+y)% x = y = y % (x+y),即n = x + y;
x <= y : 不妨将x看的足够小,此时n%x即相当于n比若干个x多余的部分;同理,y%n即为y比若干个n多余的部分,抽象化成下图所示的数轴中,我们很容易得到,n = y - y % x / 2。
3.实现代码
import java.util.Scanner; public class test01 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); // 记录输入次数 long[] result = new long[N]; while (N != 0){ int x = in.nextInt(); int y = in.nextInt(); if(x > y){ // 当x>y时,(x+y)%x = y = y%(x+y) //System.out.println(x+y); result[N-1] = x+y; }else{ // 当x<=y时,可以把x看的足够小,n%x则表示n比若干个x多余的部分,y%n则表示y比若干个n多余的部分 //System.out.println(y-y%x/2); result[N-1] = y-y%x/2; } N--; } //打印结果 for (int i = result.length-1; i >= 0; i--) { System.out.println(result[i]); } in.close(); } }
4.实现结果
5.结果验证
5.1 验证代码
public class test02 { public static void main(String[] args) { System.out.println(42068%111488); System.out.println(111488%69420); System.out.println(6%4); System.out.println(2%6); } }
5.2 测试结果
从如下测试结果中可以看到,实验结果符合题意。