[백준] 17427: 약수의 합 2

    728x90

    일단 문제 이해를 못했었다.. N이 2이 2일때 약수를 더했는데 어떻게 4가 나오지...? 이러고 있었다가 10에서 함수를 사용해 대입해보니,

     

    g(10) = f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) + f(8) + f(9) + f(10)
    g(10) = 1 + 3 + 4 + 7 + 6 + 12 + 8 + 15 + 13 + 18
    g(10) = 87

    이 도출되었다. 

     

    처음에 이렇게 했다가O(n^2) 이라 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 이 조건을 만족하지 못해서

    a = int(input())
    ans = 0
    
    for i in range(1, a+1):
        for j in range(1, a+1):
            if i % j == 0:
                ans += j
    
    print(ans)

    10을 예시로 모든 약수를 적었더니, n / 1 의 나머지 뺀 값이 같아서 아래와 같이 도출하였다.

     

    a = int(input())
    ans = 0
    
    for i in range(1, a+1):
        ans += (a // i) * i
    
    print(ans)

     

    'Algorithm > 백준' 카테고리의 다른 글

    [백준] 6588: 골드바흐의 추측  (1) 2023.10.14
    [백준] 1929번: 소수 구하기  (0) 2023.10.14
    [백준] 1978: 소수 찾기  (1) 2023.10.11

    댓글