본문 바로가기

BOJ/Python

[BOJ/백준] 6030 - Scavenger Hunt (Python)

문제

문제링크

두 수가 주어질 때 각각의 약수를 튜플로 구성한다. 모든 튜플을 구하라.

 

풀이

일단 약수를 구하는 함수를 정의한다.

주어진 수 n에 대해 반을 나눈 범위에서 i로 n을 나눴을 때 나머지가 0이라면 리스트에 추가하고

i로 n을 나눈 몫이  i와 다르다면 리스트에 추가한다.

모든 약수가 리스트에 저장되면 정렬하여 return한다.

두 수를 입력받아 각각의 약수를 리스트로 받는다.

중첩 for문으로 약수들의 각각 요소에 접근하여 튜플을 출력한다. 

 

코드

def find_divisors(n):
    divisors=[]
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            divisors.append(i)
            if i != n//i:
                divisors.append(n//i)
    return sorted(divisors)

p,q=map(int, input().split())

Ps=find_divisors(p)
Qs=find_divisors(q)
for i in Ps:
    for j in Qs:
        print(i, j)