Java

[Java] 문제 - 소수 구하기

YaluStar 2019. 1. 22. 10:46

[Java] 문제 - 소수 구하기


안녕하세요.

이번에는 소수를 구하는 문제를 코딩해보겠습니다.


소수란, 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수입니다. 예를 들어, 5는 1x5 또는 5x1로 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는 소수입니다. 그러나 6은 자신보다 작은 두 숫자(2x3)의 곱이므로 소수가 아닙니다. 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수로 정의하기도 합니다.


최종 목표

1000이하의 자연수에서 소수를 찾고, 소수의 개수를 구하는 문제입니다.

(while 문만 사용, for 문 금지)




*코딩 방식은 사람마다 다르기 때문에 정답이 될 수는 없습니다.


직접 설계해본 플로우차트(Flow Chart)입니다.


설명

n = 2부터 1000까지의 자연수

i = n과의 비교 값

cnt = 소수의 개수


기본 변수들 n, i, cnt를 설정합니다.

n이 1001이 되면 프로그램이 종료됩니다.

i = 2로 설정합니다.

i가 n보다 작거나 같으면 값을 비교하는 작업을 시작합니다.

n % i = 0에서 %는 나누기를 한 후 나머지 값을 구할 때 사용합니다.

나머지가 0이면 딱 나눠진 것입니다. ex) 4/2 => 몫2, 나머지0

나머지가 0인데 자기 자신이 아닌 다른애들로 나눠진 경우 소수가 아닙니다.


n != i에서 !=은 ==의 반대로 같지 않다라는 뜻입니다.

n과 i가 같으면 no쪽으로 이동합니다. (!= 주의)

n과 “ “ 띄어쓰기 한 칸을 출력합니다. (“ “는 결과물 보기 편하기 위해 넣었습니다.)

소수가 맞으므로 cnt에 1을 더합니다.

비교값 i에다가 1을 더합니다.

i가 n 보다 커졌으므로 no 쪽으로 이동하여 n = n + 1을 실행합니다.

그리고 n <= 1000 조건을 확인하는 방식입니다.

n이 1001이 될 때까지 반복하며, 마지막에는 “소수의 개수 : xxx”를 출력합니다.






이 플로우차트를 보고 코딩을 해보겠습니다.

단, For문은 사용하지 않습니다.


break; 는 while, for, switch 등을 탈출할 때 사용합니다. ( while(i <= n) 문만 탈출합니다. )





해당 코드를 실행하면 처음 사진과 같은 결과가 나옵니다.






이상으로 소수를 구하는 문제를 풀어보았습니다.

감사합니다.


반응형