티스토리 뷰

📌문제

암호화 방식 중에는 소수를 이용하는 것들이 많다. 보통은 매우 큰 두 개의 소수를 선택하고, 두 소수를 곱한 값을 암호화에서의 키로 사용하고는 한다. 이러한 방법이 좋은 이유는 일반적으로 매우 큰 수를 소인수분해 하는 것이 어렵기 때문이다.

소수를 택할 때 큰 수를 택하면, 이 둘을 곱해서 얻어지는 키 값도 커지게 된다. 하지만 그 반대는 성립하지 않을 수도 있다. 즉, 키 값이 매우 큰 경우에도 이를 소인수분해 하는 것은 쉬울 수도 있다.

따라서 암호문이 크랙되지 않도록 하기 위해서는, 키 값이 적절히 큰 수들의 곱으로 이루어져 있는지를 확인해야 할 필요가 있다. 키 값 K와 정수 L이 주어졌을 때, K를 인수분해 했을 때, 항상 L 이상의 값으로만 이루어져 있는지를 확인하고 싶다. 물론 인수분해 할 때 1로 나누는 경우는 고려하지 않는다.

예를 들어 K=143인 경우, 이는 11과 13의 곱으로 이루어져 있다. 즉, 이를 인수분해 하는 방법은 11×13, 143의 두 가지 경우뿐이다. 따라서 L이 11일 경우에는 인수분해 했을 때 나온 수들이 모두 L 이상이므로 좋은 경우지만, L이 12이상일 경우에는 좋은 암호가 아니다.

K와 L이 주어졌을 때, 좋은 암호인지 판단하는 프로그램을 작성하시오.

 

📌풀이

k는 항상 l 이상의 값으로만 나누어 떨어져야 함

따라서, 주어진 수 k가 l보다 작은 수로 나누어 떨어진 경우 BAD를 출력하고 프로그램 종료

그 외의 경우 GOOD 출력

 

📌코드

k, l = map(int, input().split())

for i in range(2, l):
    if k % i == 0:
        print("BAD", i)
        exit()

print("GOOD")

 

'코딩테스트' 카테고리의 다른 글

백준 10813 공 바꾸기/파이썬  (0) 2024.12.31
백준 10810 공 넣기/파이썬  (0) 2024.12.30
백준 10808 알파벳 개수/파이썬  (0) 2024.12.28
백준 25304 영수증/파이썬  (2) 2024.12.27
숨바꼭질  (0) 2024.12.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함