산술의 기본정리


Statement:

모든 자연수는 순서를 고려하지 않는다면 유일하게 소인수분해된다.


History:

역사적으로는 유클리드가 최초로 예상함.

가우스가 처음으로 증명 - 1798년, in his Disquisitiones Arithmeticae


수학적 일반화 최종버전(2018년 현재):

UFD(Unique Factorization Domain) - 추상대수 or Abstract Algebra


파이썬 예제


Input: 자연수를 입력한다


Output: 소인수와 그 지수가 순서쌍으로 나열된다.


Source Code:



def factorInteger(n):
    # n 이하의 소수 목록을 작성한다.
    primes = {k for k in range(2,n+1) if len({m for m in range(2,k) if k%m == 0}) == 0 }

    factors = []   # 소인수 목록을 저장할 변수

    # 소인수분해
    for p in primes:
        count = 0
        while n % p == 0:
            n /= p
            count += 1
        if count != 0:
            factors.append((p, count))
    return factors

n = int(input())
print(factorInteger(n))


첨언: 위 알고리즘은 매번 새로 소수 목록을 작성해서 숫자가 커질 수록 시간이 급속도로 늘어난다. 그래서, 소수목록을 따로 파일로 작성해뒀다가 빼서 쓰면 훨씬 빠른 속도로 계산을 끝낼 수 있다.

+ Recent posts