https://www.acmicpc.net/problem/17427
각각 f(N)을 저장하는 배열을 만들었고 1부터 N까지 각 i의 배수 인덱스에 있는 배열 자리에 i를 더하는 것을 반복했다.
이 때 g(N)을 저장하는 변수는 int로 하면 오버플로우가 발생할 수 있으니 long 타입으로 선언해주었다.
import java.util.*;
public class Main {
public static void main(String[] args){
int N;
long gn=0;
Scanner sc = new Scanner(System.in);
N=sc.nextInt();
int[] fn = new int[N+1];
for(int i=1; i<N+1; i++) {
for(int j=1; i*j<N+1; j++)
fn[i*j]+=i;
gn+=fn[i];
}
System.out.println(gn);
}
}
'프로그래밍 > 백준 문제풀이' 카테고리의 다른 글
백준 1978: 소수찾기(JAVA) (0) | 2022.08.20 |
---|---|
백준 17425: 약수의 합(JAVA) (0) | 2022.08.18 |
백준 1037: 약수 (0) | 2022.08.12 |
백준 4375: 1 (JAVA) / 모듈러 연산 분배 법칙 (0) | 2022.08.12 |
백준 1316: 그룹 단어(JAVA) / (0) | 2022.08.10 |