http://euler.synap.co.kr/prob_detail.php?id=23
Skillist 코드---------------------------------------------------------------------------------
public static void main(String[] args){
int array[] = new int[28124];
//0 = 초과수 아닌수
//1 = 초과수 아닌수 + 초과수 2개 합으로 표현 가능
//2 = 초과수
//3 = 초과수 + 초과수 2개 합으로 표현 가능
for(int i = 1; i<array.length;i++){ //약수를 구하여 초과수 구분하기
int now = i;
int sum = 1;
for(int j = 2; j<now; j++){
if(i%j == 0){
sum += j;
if(j != (i/j)){ //i=(i/j)인 경우 제외 ex)4/2=2
sum+=(i/j);
}
now = i/j;
}
}
if(sum > i){
array[i] = 2; //초과수
}else{
array[i] = 0; //초과수 아닌수
}
}
for(int i=1;i<array.length;i++){
if(array[i] > 1){ //해당 수가 초과수 이면
for(int j=i;j<array.length;j++){
if(array[j] > 1){ //해당 수가 초과수 이면
if( 28124 > (i+j)){ //두개의 초과수의 합이 28123이하일 경우
if(array[i+j] == 0){
array[i+j] = 1; //초과수 아닌수 + 초과수 2개 합으로 표현 가능
}else if(array[i+j] == 2){
array[i+j] = 3; //초과수 + 초과수 2개 합으로 표현 가능
}
}
}
}
}
}
int total = 0;
for(int i=1;i<array.length;i++){ //초과수가 아닌 양의 정수의 합
if(array[i]==0 || array[i] ==2){
total += i;
}
}
System.out.println(total);
}
'코딩 테스트 > Project Euler @ kr' 카테고리의 다른 글
25) 피보나치 수열에서 처음으로 1000자리가 되는 항은 몇 번째? (0) | 2017.02.18 |
---|---|
24) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9로 만들 수 있는 1,000,000번째 사전식 순열은? (0) | 2017.02.18 |
22) 영문 이름 점수 합계 구하기 (0) | 2017.02.17 |
21) 10000 이하 모든 친화수(우애수)의 합은? (0) | 2017.02.17 |
20) 100! 의 자리수를 모두 더하면? (0) | 2017.02.16 |