bj11653 소인수 분해

coh·2022년 5월 24일
0

백준

목록 보기
9/27

어제 자기 전에 수학 문제 슥 풀고 자려고 했는데 30분 동안 안 풀려서 그냥 잤다.. 분명 난 완전 잘 했는데 왜 안 되지 하고 누워서 생각하다보니.. 아, 전부다 나눠서 소인수 출력 후 소수인 case에 대해 else로 처리하면 되겠다는 생각이 들었다. 그럼 이전에 소수 찾는 알고리즘 쓰면 되겠구나.
근데 일단 한 번 수정해야한다. 왜 runtime error가 안 떴는지 모르겠는데
소수 찾는 code만 이용해서 알고리즘 복잡도를 낮출 수 있을 것 같다.

N = int(input())


def divide(num):
    i = 2
    if num == 1:
        return 1
    while i*i <= num:
        if num % i == 0:
            num = num // i
            print(i)
            return num
        i += 1


def check_prime(num):
    i = 2
    if num == 1:
        return 0
    while i * i <= num:
        if num % i == 0:
            return 0
        i += 1
    return 1


while N != 1:
    if check_prime(N) == 0:
        N = divide(N)
    else:
        print(N)
        N = 1

그래서 code를 한 번 수정했다.
그냥 소수찾는 알고리즘에서 continue를 적용하면 쉽게 풀 수 있을 것 같았고 실제로 그러했다!

N = int(input())


def check_prime(num):
    i = 2
    if num <= 1:
        return 0
    while i * i <= num:
        if num % i == 0:
            num = num // i
            print(i)
            continue
        i += 1
    print(num)


check_prime(N)
profile
Written by coh

0개의 댓글