< 문제 >
-
개요 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(10분) (1은 소수가 아닙니다.)
-
예상 결과 예상 결과는 하기 코드 실행시 예상되는 결과 값이다.
10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
< 정답풀이 >
public class Test07 {
private static final String result = "결과 : %d' 소수의 갯수 : %d";
public static void main( String[] args ) {
// 시작시간 기록
long startTime = System.currentTimeMillis();
// STEP.1. 주어진 숫자의 소수의 갯수 구하기
int num = 10;
int answer = numberOfPrime( num );
System.out.println( String.format( result, num, answer ) );
// 종료시간 기록
long endTime = System.currentTimeMillis() - startTime;
System.out.println( "소요시간 : " + endTime + "ms." );
}
/**
* <PRE>
* 1~num까지 소수의 갯수를 구한다.
* </PRE>
*
* @return 소수의 갯수
*/
public static int numberOfPrime( int num ) {
int cnt = 0; // 결과값을 저장하기 위한 변수
// 나누는 대상은 1~num까지이다.
for ( int inx = 1 ; inx <= num ; inx++ ) {
// 소수후보는 2부터 시작하며, 나누는 수를 초과할 수 없다.
for ( int prime = 2 ; prime <= inx ; prime++ ) {
// 소수는 자기 자신으로만 나눠질 수 있다.
if ( inx % prime == 0 ) {
if ( inx == prime ) {
cnt++;
// 자기이외의 다른 수로 나눠진 경우 해당 수는 소수가 아니다.
} else {
break;
}
// 나머지가 존재하는 경우 건너뛴다.
} else {
continue;
}
}
}
return cnt;
}
}