유한소수 판별하기.python

Haks.·2024년 12월 24일
0

Study

목록 보기
25/65

문제 설명

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

기약분수로 나타내었을 때, 분모의 소인수가 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

0개의 댓글

관련 채용 정보