728x90
반응형
https://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
문제 해결
- 시간으로 보았을 때 $O(n)$의 시간복잡도를 가져야한다.
- 그러기 위해서는 각각의 약수의 합을 구해서 더하는 방식으로 할 수 없다.(최소 $O(n\sqrt{n})$)
- 1부터 n까지 반복문 $i$을 돌릴 때 n을 $i$로 나누면 n까지 숫자중 $i$를 약수로 갖는 개수가 나온다. 따라서 $i$를 곱해주면 $i$를 약수로 갖는 것들의 개수에 i를 곱하는 것이 된다.
- 따라서 answer = $\sum_{i=1}^{n} [\frac{n}{i}]{i}$가 된다
- 최고자리수가 7자리이므로 int로 부족하고 long long을 써야한다.
CODE
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
long long answer = 0;
for (int i=1;i<n+1;i++){
answer += (n/i)*i;
}
cout<<answer<<endl;
return 0;
}
.
728x90
반응형
'알고리즘 > [C++] 백준 BOJ' 카테고리의 다른 글
[C++] 백준 16480 외심과 내심은 사랑입니다. (0) | 2023.12.06 |
---|---|
[C++] 백준 6131 완전 제곱수 (2) | 2023.11.20 |
[C++] 백준 2637 장난감 조립 (0) | 2023.10.24 |
[C++] 백준 3059 등장하지 않는 문자의 합 (0) | 2023.10.15 |
[C++] 백준 10451 순열 사이클 (0) | 2023.09.03 |
댓글