소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.
기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
a, b는 정수
0 < a ≤ 1,000
0 < b ≤ 1,000
입출력 예
a b result
7 20 1
11 22 1
12 21 2
# 우선 정수를 소인수로 나타내는 함수를 만들었다.
def prime_factor(a):
a_prime = []
start = 2
while start <= a :
if a % start == 0:
a_prime.append(b)
a //= start
else :
start += 1
return a_prime
# 그후 기약분수로 만들기 위하여 b_prime 의 공통인자를 지웠다.
def solution(a, b):
a_prime = prime_factor(a)
b_prime = prime_factor(b)
for i in a_prime :
if i in b_prime :
b_prime.remove(i)
# 2 또는 5일때만 유한소수
for i in b_list:
if i != 2 and i != 5:
return 2
return 1
math 함수를 사용하여 gcd 를 찾아 낼 수 있다.
from math import gcd
def solution(a, b):
b //= gcd(a,b)
# 2랑 5만있어야 하니 다 나눠 줫을때 1이면 유한소수
while b%2 ==:
b//2
while b%5 ==:
b//5
return 1 if b==1 else 2
# 이것도 좋은 풀이라 생각하여 생각해 보았다.
def solution(a, b):
answer = 0
for i in range(2, min([a, b]) + 1):
while a % i == 0 and b % i == 0:
a = a // i
b = b // i
while b % 2 == 0:
b = b // 2
while b % 5 == 0:
b = b // 5
if b == 1:
answer = 1
else:
answer = 2
return answer