두 자연수 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)를 출력한다.
해당 문제는 풀이는 간단하지만 결과를 나열해 보고 규칙을 찾아내는 능력이 중요하다 생각한다.
N이 10으로 주어졌을 떄 [1][1,2][1,3][1,2,4][1,5][1,2,3,6][1,7][1,2,4,8][1,3,9][1,2,5,10]
1의 개수 10/1 = 10
2의 개수 10/2 = 5
3의 개수 10/3 = 3
4의 개수 10/4 = 2
5의 개수 10/5 = 2
6의 개수 10/6 = 1
7의 개수 10/7 = 1
8의 개수 10/8 = 1
9의 개수 10/9 = 1
10의 개수 10/1 = 1
규칙을 확인 하였는가?
N보다 작거나 같은 자연수에서 i*N/i의 식을 for문으로 해결할 수 있다.
하지만 주의할 점은
n이 1만일경우 82,256,014 의 결과가 나오게 된다.
공을 2개 더 붙이게 되면 82억이 됨으로 Integer 타입에 값을 할당하게 되면 오류가 발생할 수 있다.
따라서, 답변 변수에는 Long type 을 사용 하여야 한다.
by kotlin
fun main() {
val sc = Scanner(System.`in`)
val n = sc.nextInt()
var ans = 0L
for(i in 1..n){
ans += i*(n/i)
}
println(ans)
}