본문 바로가기

코딩 테스트/Project Euler @ kr

27) 연속되는 n에 대해 가장 많은 소수를 만들어내는 2차식 구하기

반응형

http://euler.synap.co.kr/prob_detail.php?id=27


Skillist 설명---------------------------------------------------------------------------------


public static void main(String[] args){

int max = 0;

int maxnum = 0;

for(int a=-999; a<1000; a++){

for(int b= -999; b<1000; b++){

int n=0;

boolean doit = true;

while(doit){

int result = (n*(a+n)) + b;

if(result>1){ //소수는 양수 

for(int k=2;k<result;k++){ //소수 판별

if(result%k==0){ //소수가 아니면 종료

doit = false;

break;

}

}

n+=1;

}else{

doit = false;

}

if(max<n){ //연속된 n 갯수 갱신

max = n;

maxnum = a*b;

}

}

}

}

System.out.println(maxnum);

}


다시 공부 ----------------------------------

조건부터 구해놓고 코딩


public static void main(String[] args){

boolean sosu[] = new boolean[1000000]; //에라토스테네스의 체로 소수 미리 구하기

sosu[2]=false;

for(int i=4;i<sosu.length;i+=2){

sosu[i] = true;

}

for(int i=3;i<sosu.length;i+=2){

for(int j=i*2;j<sosu.length;j+=i){

sosu[j] = true;

}

}

//-------------------------

int max=0, A=0, B=0;

for(int a=-999;a<1000;a++){ //-1000 < a < 1000

for(int b = 3; b < 1000; b+=2){ //3 <= b < 1000

if(!sosu[b] && a+b>=1 && !sosu[1+a+b]){ //b는 소수, 1 <= a+b && 1+a+b는 소수

int k=0; //n=0부터 1씩 증가하며 값이 소수인 갯수 찾기 

while(2<=((k+a)*k+b) && !sosu[(k+a)*k+b]){ //2 <= n(n+a)+b && n(n+a)b는 소수

k+=1;

}

if(max < k){

max = k;

A=a;

B=b;

}

}

}

}

System.out.println(A*B);

}


반응형