반응형
문제설명
세 수 a, b, c의 공약수가 몇 개인지 구하려고 합니다. 공약수란, 동시에 모든 정수의 약수인 정수를 뜻합니다. 예를 들어, 세 수 24, 9, 15의 공약수는 1, 3이고, 따라서 양의 공약수는 2개입니다.
세 수의 공약수가 몇 개인지 구하기 위해 다음과 같이 프로그램 구조를 작성했습니다.
```
1. 세 수의 최대공약수를 구합니다.
2. 앞서 구한 최대공약수의 약수가 몇 개인지 구합니다.
```
세 수 a, b, c가 매개변수로 주어질 때, 세 수의 약수가 몇 개인지 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.
매개변수 설명
세 수 a, b, c가 매개변수로 주어집니다.
* 세 수 a, b, c는 1 이상 1,000 이하인 정수입니다.
return 값 설명
세 수의 약수가 몇 개인지 return 합니다.
예시
| a | b | c | return |
|----|---|----|--------|
| 24 | 9 | 15 | 2 |
예시 설명
문제에 나온 예와 같습니다.
문제 코드
def func_a(a, b):
mod = a % b
while mod > 0:
a = b
b = mod
mod = a % b
return b
def func_b(n):
answer = 0
for i in range(1, n+1):
if func_@@@(@@@):
answer += 1
return answer
def func_c(p, q):
if p % q == 0:
return True
else:
return False
def solution(a, b, c):
answer = 0
gcd = func_@@@(func_@@@(@@@)@@@)
answer = func_@@@(@@@)
return answer
풀이
# 유클리드 호제법으로 최대공약수 구하기
# https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
def func_a(a, b):
mod = a % b
while mod > 0:
a = b
b = mod
mod = a % b
return b
# 약수의 개수 구하기
def func_b(n):
answer = 0
for i in range(1, n+1):
if func_c(n, i):
answer += 1
return answer
# q가 p의 약수인지 구하기
def func_c(p, q):
if p % q == 0:
return True
else:
return False
def solution(a, b, c):
answer = 0
gcd = func_a(func_a(a, b), c)
answer = func_b(gcd)
return answer
댓글