본문 바로가기

코딩 테스트/Project Euler @ kr

23) 두 초과수의 합으로 나타낼 수 없는 모든 양의 정수의 합은?

반응형

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);

}

반응형