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