#CYF0056. 找一个最大的 y

找一个最大的 y

题目背景

最大公约数:如果 nZ,n2n \in Z , n \geq 2 ,而 {a1,a2,a3,...,an}\{a_1, a_2, a_3, ... , a_n\} ,现有 dd 为正整数,设 da1,da2,da3,...,dand | a_1, d|a_2, d|a_3, ..., d|a_n ,则 dd 叫做 {a1,a2,a3,...,an}\{a_1, a_2, a_3, ... , a_n\} 的公约数,公约数会有很多,其中最大的叫做最大公约数,最大公约数是其他所有公约数的倍数,记做 (a1,a2,a3,...,an)=d(a_1, a_2, a_3, ... , a_n) = d ,如果想要求 aabb 的最大公约数,可以记做 gcd(a,b)gcd(a, b)​ 。

题目描述

给定一个 xx ,请你找出一个 y(1y<x)y (1 \leq y < x) ,使得 gcd(x,y)+ygcd(x, y) + y 最大。这个 yy 可能有多个,请找出最大的那一个。

输入格式

输入多行。

第一行输入一个正整数 tt ,代表有 tt 组测试数据。

接下来 tt 行,每行输入一个正整数 xx

输出格式

输出多行。

对于每一组测试数据,输出满足题意的最大的 yy​ 。

样例 #1

样例输入 #1

7
10
7
21
100
2
1000
6

样例输出 #1

9
6
20
99
1
999
5

提示

样例解释】:

  • 对于最后一组样例,有以下情况:

$y = 1(gcd(6, 1) + 1 = 2), \\ y = 2(gcd(6, 2) + 2 = 4),\\ y = 3(gcd(6, 3) + 3 = 6),\\ y = 4(gcd(6, 4) + 4 = 6),\\ y = 5(gcd(6, 5) + 5 = 6)$

  • 其中 yy3 4 5 的时候 gcd(x,y)+ygcd(x, y) + y 最大,其中最大的 yy5 所以输出 55

数据范围】:

测试点编号 xx \geq xx \leq
01 ~ 10 22 10510^5
11 ~ 15 10910^9
16 ~ 20 101810^{18}

对于 100%100\% 的数据,保证 1t103,2x10181 \leq t \leq 10^3, 2 \leq x \leq 10^{18}​ 。