[Python] 코딩 도장 - Largest prime factor

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: Largest prime factor] - Lv.2

어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 한다.

예를 들면 13195의 소인수는 5, 7, 13, 29 이다.

600851475143의 소인수 중에서 가장 큰 수를 구하시오.

출처: https://codingdojang.com/scode/450?answer_mode=hide


[풀이]

def Largestprimefactor(n):
    i = 2
    a= {}
    while n != 1:
        j=0
        while n % i == 0:
            n = int(n/i)
            j += 1
        if j != 0:
            a[i] = j
        i += 1
    return print(max(a.keys()), a)

Largestprimefactor(600851475143)
6857 {71: 1, 839: 1, 1471: 1, 6857: 1}

전체적인 방법으로 모든 소인수로 n을 나누면 1이 되므로 n이 1이 될 때까지 while문을 사용하였다.

두 번째 while문은 처음엔 2로 나누되 더 이상 2로 나눠지지 않을 때까지 반복하면서 n을 갱신해준다.

이러면 2의 배수 즉, 소수가 아닌 수에 대해선 두 번째 while문은 실행되지 않을 것이다.

다음은 3에 대해 실행 4는 패스, 5는 실행, 6은 패스, 7은 실행 등 소수에 대해서만 작동된다.


[추천 풀이]

def Largest_prime(n):
    cnt = 2
    while cnt < n:
        if n % cnt  ==  0:
            Largest_prime(n/cnt)
            return 0
        cnt += 1
    print(n)

Largest_prime(600851475143)
6857.0





0

이 분도 비슷하지만 나와 달리 while을 하나만 사용하고 재귀 방식을 사용하였다.

Leave a comment