🖥️ CS/Baekjoon Algorithms

#17427번 약수의 합2 (C++)

한국의 메타몽 2021. 2. 24. 02:05

문제 링크 : www.acmicpc.net/problem/17427

 

17427번: 약수의 합 2

두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더

www.acmicpc.net

이 문제는 아래 코드를 보며 이해하면 빠르게 해결할 수 있다.

 

문제 풀이는 다음과 같다.

(1) N=5를 예시로 들어보자.

(2) 1에서 5까지 모든 수들은 1을 약수로 가지고 있다. 때문에 (n/i)*i 를 1로 치환하면 (5/1) * 1, 즉, 5가 5개들어있음을 뜻한다.

(3) 2의 경우, 2에서 한 번, 4에서 한 번 약수를 가지고 있다. 즉, 총 2번을 가지고 있고 합은 4가 된다. 

이를 (n/i)*i에서 2로 치환하면 (5/2)*2, 즉, 2가 2번 있음을 뜻하여 4를 더하게 된다. 

(4) 이러한 원리로 1부터 n까지 모든 약수의 합을 더하게 된다.

#include <iostream>
using namespace std;

int main(void) {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n = 0;
    long long ans = 0;
    cin >> n;
    for(int i=1; i<=n; i++){
        ans += (n/i)*i;
    }
    cout << ans << "\n";
   return 0;
}

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#14225번 부분수열의 합 (C++)  (0) 2021.02.24
#1182번 부분수열의 합 (C++)  (0) 2021.02.24
#4375번 1 (C++)  (0) 2021.02.23
#15661번 링크와 스타트 (C++)  (0) 2021.02.15
#17836번 공주님을 구해라! (C++)  (0) 2021.02.14