http://euler.synap.co.kr/prob_detail.php?id=50
에라토스테네스의 체를 사용하여 (합성수의 배수를 지우는 것)
소수 0번째부터 마지막까지의 합을 구함 (사실 소수의 합이 1000000을 넘지 않을때 까지)
(0번째 부터 i번째 까지의 합) - (0번째 부터 j번째 까지의 합) = (j+1번째 부터 i번째 까지의 합) 을 이용
ex)
(1~10의 합) - (1~8의 합) = (9~10의 합)
55 - 36 = 19
Skillist 설명---------------------------------------------------------------------------------
public static void main (String[] args){
boolean sosuTF[] = new boolean[1000001]; //0~1000000
LinkedList<Integer> sosusum = new LinkedList<Integer>();
int maxsu = 0;
int totalsum = 2;
sosuTF[0]=true;
sosuTF[1]=true;
for(int i=2;i<=1000000;i++){ //에라토스테네스의 체
if(sosuTF[i]){
continue;
}
for(int j=i+i;j<=1000000;j+=i){
sosuTF[j]=true; //합성수
}
}
for(int i=2;totalsum<1000000;i++){
if(!sosuTF[i]){ //소수 찾아서
sosusum.add(totalsum);
totalsum+=i;
}
}
totalsum=0;
for(int i=sosusum.size()-1;i>=0;i--){
for(int j=0;sosusum.get(j)<sosusum.get(i);j++){
if(!sosuTF[sosusum.get(i)-sosusum.get(j)]){ //소수면
if(maxsu<i-j+1){
maxsu = i-j+1;
totalsum = sosusum.get(i)-sosusum.get(j);
}
}
}
}
System.out.println("결과 : " + maxsu + "번 -> " + totalsum);
}
'코딩 테스트 > Project Euler @ kr' 카테고리의 다른 글
52) 2배, 3배, 4배, 5배, 6배의 결과도 같은 숫자로 이루어지는 가장 작은 수 (0) | 2017.03.06 |
---|---|
51) 일부 숫자를 치환했을 때 8개의 서로 다른 소수가 생기는 가장 작은 소수 (0) | 2017.03.06 |
49) 세 항이 소수이면서 다른 수의 순열이 되는 4자리 숫자의 등차수열 찾기 (0) | 2017.03.02 |
45) 오각수와 육각수도 되는, 40755 다음으로 큰 삼각수는? (0) | 2017.03.02 |
44) 합과 차도 모두 오각수인 두 오각수 차의 최소값은? (0) | 2017.03.02 |