[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) 문만 탈출합니다. )
해당 코드를 실행하면 처음 사진과 같은 결과가 나옵니다.
이상으로 소수를 구하는 문제를 풀어보았습니다.
감사합니다.
'Java' 카테고리의 다른 글
[Java] next()와 nextLine() 함수의 차이 (0) | 2019.01.21 |
---|---|
[Java] 조건문에서 |와 || 차이점에 대하여 알아보기 (0) | 2019.01.20 |
[Java] 조건문에서 &와 && 차이점에 대하여 알아보기 (0) | 2019.01.19 |
[Java] 객체와 클래스 (0) | 2019.01.12 |
[Java] 객체와 인스턴스 (0) | 2014.05.01 |