这种题肯定不是硬算求的,我们来找一下ab与n和m之间的关系。
已知条件为a + b = n和a % b = m
很显然,n应该是大于m的,如何证明呢?
根据a+b=n推得,a最大为n-1,b最小就为1,此时m取最大,为(n-1) % 1 = n-1,即m=n-1
因此m <= n时才合法。
再来根据a % b = m推关系。
a可以表示为a = kb + m==>a + b = (k+1)b + m = n
而k >= 0且b > m,所以(k+1)b > m,所以n > 2 * m才合法。
故而,当m > n或者n <= 2*m时,不存在合法的a和b,输出-1.
反之,当m <= n以及n > 2*m时,存在合法的a和b,此时由于存在多个解,可令k=0,求得b = n - m以及a = m
T = int(input())
for _ in range(T):
n, m = map(int, input().split())
if n <= 2 * m or n <= m:
print(-1)
else:
a, b = m, n-m
print(a, b)



京公网安备 11010502036488号