https://www.acmicpc.net/problem/17427
수학
N까지의 모든 약수의 합을 구해야 한다.
일단 시간제한을 잘 봐야 한다. 시간제한이 0.5초이다. 대략적으로 1억이 1초이고 N은 백만까지 가능하다.
여기서 우리는 N제곱으로 풀면 시간초과가 나온다는 것을 알아야 한다. 나도 아직 한번에 알지는 못하지만 계속 풀어보면서 확인해야 한다.
밑에 풀이는 사실 외워야 한다. 기존에 생각해낼 수 없는 풀이이기 때문에 외우고 잊어버리지 않게 꼭 기억해야 한다.
(N / i) * i
이다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
long answer = 0;
// 1부터 N까지 for문을 돌린다.
for (int i = 1; i <= n; i++) {
// (n / i) * i의 계산식으로 각 숫자의 총 합을 구해주고 그 합을 answer에 넣어준다.
answer += (long) (n / i) * i;
}
// 마지막으로 그 답을 출력해준다.
System.out.println(answer);
}
}