A. Nastia and Nearly Good Numbers | #720 Div.2
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로 나눌수 있지 않다.
Author And Source
이 문제에 관하여(A. Nastia and Nearly Good Numbers | #720 Div.2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsin2475/A.-Nastia-and-Nearly-Good-Numbers-720-Div.2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)