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);
}
'코딩 테스트 > Project Euler @ kr' 카테고리의 다른 글
29) 2 ≤ a ≤ 100 이고 2 ≤ b ≤ 100인 a, b로 만들 수 있는 ab의 개수 (0) | 2017.02.20 |
---|---|
28) 1001×1001 나선모양 행렬에서 대각선 원소의 합은? (0) | 2017.02.20 |
25) 피보나치 수열에서 처음으로 1000자리가 되는 항은 몇 번째? (0) | 2017.02.18 |
24) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9로 만들 수 있는 1,000,000번째 사전식 순열은? (0) | 2017.02.18 |
23) 두 초과수의 합으로 나타낼 수 없는 모든 양의 정수의 합은? (0) | 2017.02.17 |