[소수 찾기 - Easy]

< 문제 >

  • 개요 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;
	}
}