https://codeforces.com/contest/1521/problem/A
시간 1초, 메모리 256MB
input :
output :
"YES" and 3 different positive integers x, y, and z (1 ≤ x, y, z ≤ 1018) such that exactly one of them is good and the other 2 are nearly good, and x+y=z.
"NO" if no answer exists.
"YES"를 출력하면 각각 다른 x, y, z를 출력하도록 합니다. 그것이 아니면 "NO"를 출력합니다.
조건 :
The integer is good if it is divisible by A⋅B;
Otherwise, the integer is nearly good, if it is divisible by A.
2개의 양수 A, B를 입력받습니다. A와 B의 곱셈의 값이라면 good
하다고 한다. nearly good
이려면 A로 나누어져야 한다.
문제풀기 싫다... ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
처음 문제를 보았을 땐 a와 b의 최대 공약수를 이용해서 가장 작은 배수에서부터 구해야 하는 건가 싶었는데 이렇게 하면 수의 범위가 너무 커져서 불가능 해 보인다.
그냥 수학적으로 답을 출력하게 해야 될 것 같다.
출력해야 할 것은 x, y, z 인데 그 중 2개는 nearly good, 1개는 good이여야 한다. 가장 작은 nearly good을 본다면 당연히 A일 것이다.
그냥 입력 받은 거로 구할 수 있다고 볼 떄 A * B가 good이 되고 이에 A를 더 해주면 조건을 충족 시킬 수 있다.
사실 문제에서 가장 작은 값이나 뭐 큰 갑에 대한 조건 없이 많은 답이 존재하면 그 중 한 개를 출력하세요 그랬으니까 별 상관이 없다....
뭐 그냥 삽질한거지 ㅋㅋㅋㅋㅋㅋㅋㅋ
import sys
t = int(sys.stdin.readline())
for i in range(t):
a, b = map(int, sys.stdin.readline().split())
if b == 1:
print("NO")
continue
print("YES")
print(f"{a} {a * b} {a + a * b}")
물론 1이 존재한다면 위의 식이 성립되지 않는다. b가 1이기 떄문에 a를 더한다 해서 a로 나눌수 있지 않다.