본문 바로가기

프로그래밍/코드분석

소수(Prime Number) 판단 문제

난 정말 JAVA를 공부한 적이 없다구요(윤성우 저, 오렌지미디어)에서 발췌한 문제(160p 문제 6-2)



   전달된 값이 소수(prime number)인지 아닌지를 판단하여, 소수인 경우 true를, 소수가 아닌 경우 false를 반환하는 메서드를 정의하고, 이를 이용해서 1이상 100이하의 소수를 전부할 수 있도록 main 메서드를 정의하자.



[1] main 메서드와 isPrime 메서드를 구분해서 생각할 필요가 있다.

    이 문제의 포인트는 boolean (true, false)으로만 전달되는 값을 온전한 숫자로 출력할 수 어야 한다.


[2] isPrime의 반환값을 보면 boolean이다. (true 또는 false만 반환)

   따라서 main 메서드에서는 소수에 해당하는 값(true)만 걸러내는 소쿠리라고 생각하자.


[3] 1이상 100이하의 소수만 찾으면 되니까 메인(main) 메서드에서는 1부터 100까지 돌리는 for문을 설정


[4] isPrime 메서드


   (1) 1은 소수가 아니므로 if를 이용해 false라고 박아준다.

   (2) 소수는 1과 자기자신으로만 나누어져야 한다 (즉, 그 외의 수로 나누면 나머지가 생긴다)

   (3) for문에서는 2부터 시작해서 자기자신(a)까지 나눠준다. 

   (4) 만약 for문에 있는 i가 2에서부터 시작해서 1씩 증가하면서 반복문을 시작하는데

       나머지가 0이 되는게 있다면 (즉, 나누어 떨어진다면) 이것은 소수가 될 수 없다.

  

 여기서 i<a가 아니라 i<=a가 된다면 출력값이 어떻게 될까?


부등호를 바꿔주면 출력이 되지 않는다. a가 i로 나누어지면 for문에 있는 false값이 실행되기 때문에 아무것도 전달하지 않는다.


   (5) isPrime에서 true값이 반환되면, main메서드는 i를 출력하게 된다.