아래 실행 결과 처럼 2차원 배열에 직각 삼각형 형태로 1000까지의 자연수 중 2부터 시작하여 순차적으로 소수를 15개 까지 저장하는 알고리즘을 작성하라.
package javalesson.com.javalesson.ch01test;
public class T06PrimeTriangle {
public static void main(String[] args) {
int pri[] = new int[15]; //소수 15개를 넣을 배열
int array[][] = new int[5][5]; //삼각형을 출력하기 위한 2차원배열
int cnt; //소수인지 판별하기 위해 이전에 구해진 소수로 나누어 줄 횟수
int P,Q; //P : 소수 Q: 소수 판별 반복문을 위한 변수
int mok,na; //소수를 판별하기 위한 몫과 나머지
pri[0]=2;pri[1]=3; //예외 사항이므로 미리 초기값을 줌
cnt=1;
for(P=5;P<=1000;P+=2){ //5부터 1000까지 홀수만 소수인지 판별하겠다
for(Q=1;Q<cnt;Q++){ //P를 이전에 구해진 소수로 나누며 판별하겠다.
na=P-mok*pri[Q-1]; //P%pri[Q-1] 나머지가 0이면 소수가 아니다.
if(na==0)break;
}
if(Q==cnt){ //반복문을 끝까지 돌았을 경우에만 아래를 실행하겠다.
cnt++; //소수를 찾으면 증가시킨다. ex) 7을 판별하려면 3과 5로 나눠봐야한다.
pri[cnt]=P; //현재의 P를 배열에 저장한다.
}
if(cnt==14)break; //15개의 소수를 찾으면 탈출한다.
}
cnt=0;
for(P=0;P<5;P++){ //5*5 2차원 배열에 소수를 직각 삼각형 형태로 넣어준다.
for(Q=4-P;Q<5;Q++){
array[P][Q]=pri[cnt];
cnt++;
}
}
//출력
for(P=0;P<5;P++){
for(Q=0;Q<5;Q++){
if(array[P][Q]==0){
System.out.printf(" ");
}else{
System.out.printf("%3d",array[P][Q]);
}
}
System.out.println();
}
}
}
더 생각해 볼 점
예외사항 (pri[0]=2, pri[1]=3)을 최대한 배제한 로직으로 수정해보기
'JAVA > 알고리즘 예제' 카테고리의 다른 글
[JAVA] 화폐 단위별 매수 계산 (0) | 2016.09.15 |
---|---|
[JAVA] 부호있는 8비트 2진수를 10진수로 변환 (0) | 2016.09.15 |
[JAVA] 7에 가장 가까운 정수 찾기 (0) | 2016.09.14 |
[JAVA] 8bit 2진수의 2의 보수 구하기 (0) | 2016.09.14 |
[JAVA] 5자리 2진수의 보수 구하기 (0) | 2016.09.14 |