문제
두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더한 값이고, f(A)로 표현한다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)로 표현한다.
자연수 N이 주어졌을 때, g(N)을 구해보자.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
출력
첫째 줄에 g(N)를 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include<stdio.h>
#pragma warning(disable:4996)
#pragma warning(disable:6031)
int main() {
int n;
long long ans = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
ans += i * (n / i);
}
printf("%lld\n", ans);
return 0;
}
|
cs |
시간제한이 있어서 약수를 하나하나 구해서는 안 된다.
1~n 의 수 중에서 1을 약수로 가지는 수는 n개, 2를 약수로 가지는 수는 n/2 개 ... 라는 것을 이용해야 한다.
'백준 온라인 저지 (BOJ) 문제풀이' 카테고리의 다른 글
백준 온라인 저지 (BOJ) 1806 부분합 (0) | 2020.09.21 |
---|---|
백준 온라인 저지 (BOJ) 13565 침투 (0) | 2020.09.21 |
백준 온라인 저지 (BOJ) 1527 금민수의 개수 (0) | 2020.09.21 |
백준 온라인 저지 (BOJ) 14716 현수막 (0) | 2020.09.20 |
백준 온라인 저지 (BOJ) 1490 자리수로 나누기 (0) | 2020.09.20 |