A. Nastia and Nearly Good Numbers | #720 Div.2

LONGNEW·2021년 7월 10일
0

CP

목록 보기
27/155

https://codeforces.com/contest/1521/problem/A
시간 1초, 메모리 256MB

input :

  • t (1 ≤ t ≤ 10000)
  • A B (1 ≤ A ≤ 106, 1 ≤ B ≤ 106)

output :

  • For each test case print:

"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"를 출력합니다.

조건 :

  • Nastia has 2 positive integers A and B. She defines that:

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로 나눌수 있지 않다.

0개의 댓글