이 글에서는 두 구간(시작 숫자와 끝 숫자) 사이에 존재하는 소수를 화면에 출력하는 방법을 살펴봅니다. 소수(prime number)란 1과 자기 자신이라는 두 개의 약수만을 가지며, 그 외의 어떤 수로도 나누어 떨어지지 않는 특별한 수를 의미합니다.
소수의 기본 개념
어떤 수의 약수가 오직 1과 자기 자신뿐이라면 그 수는 소수입니다. 예를 들어 11의 약수는 1과 11뿐이므로 소수에 해당하며, 대표적인 소수로는 2, 3, 5, 7, 11, 13 등이 있습니다. 특히 2는 유일한 짝수 소수이고, 나머지 모든 소수는 홀수라는 점이 특징입니다. 한 가지 주의할 점은 1은 약수가 자기 자신 하나뿐이기 때문에 소수에 포함되지 않는다는 것입니다.
다음은 이번 예제의 입력값과 기대 출력 결과입니다.
입력
입력값이 다음과 같다고 가정해 보겠습니다.
시작 숫자 : 1 끝 숫자 : 75
출력
원하는 출력 결과는 다음과 같습니다.
구간 1과 75 사이의 소수는 다음과 같습니다: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73
알고리즘
1단계 - 시작 2단계 - 필요한 변수들을 선언한다 3단계 - 사용자로부터 값을 입력받거나 값을 직접 정의한다 4단계 - 낮은 수부터 높은 수 사이에서 while 반복문을 실행한다 5단계 - for 반복문으로 구간 내 각 숫자를 순회하면서, 1을 제외한 자신보다 작은 수로 나누어 떨어지는지 검사하고 결과를 저장한다 6단계 - 결과를 출력한다 7단계 - 종료
예제 1: 사용자 입력 받기
첫 번째 예제는 프롬프트를 통해 사용자가 직접 시작 숫자와 끝 숫자를 입력하는 방식입니다. 온라인 코딩 도구에서 직접 실행해 보면서 동작을 확인할 수도 있습니다.
import java.util.Scanner;
public class PrimeNumber {
public static void main(String[] args) {
int my_high, my_low, i;
boolean my_temp;
System.out.println("Required packages have been imported");
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined ");
System.out.print("Enter the starting number : ");
my_low = my_scanner.nextInt();
System.out.print("Enter an ending Number: ");
my_high = my_scanner.nextInt();
System.out.println("The prime numbers between the interval " + my_low + " and " + my_high + " are:");
while (my_low < my_high) {
my_temp = false;
for(i = 2; i <= my_low/2; ++i) {
if(my_low % i == 0) {
my_temp = true;
break;
}
}
if (!my_temp && my_low != 0 && my_low != 1)
System.out.print(my_low + " ");
++my_low;
}
}
}출력
Required packages have been imported A reader object has been defined Enter the starting number : 1 Enter the ending number : 75 The prime numbers between the interval 1 and 75 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73
예제 2: 값 미리 정의하기
두 번째 예제는 시작 숫자와 끝 숫자를 코드 안에서 미리 정의한 뒤, 그 값을 사용해 결과를 콘솔에 출력하는 방식입니다. 사용자 입력 없이 바로 결과를 확인해야 할 때 유용합니다.
public class PrimeNumber {
public static void main(String[] args) {
int my_high, my_low, i;
boolean my_temp;
my_low = 1;
my_high = 75;
System.out.println("The starting and ending numbers are defined as " + my_low + " and " + my_high);
System.out.println("The prime numbers between the interval " + my_low + " and " + my_high + " are:");
while (my_low < my_high) {
my_temp = false;
for(i = 2; i <= my_low/2; ++i) {
if(my_low % i == 0) {
my_temp = true;
break;
}
}
if (!my_temp && my_low != 0 && my_low != 1)
System.out.print(my_low + " ");
++my_low;
}
}
}출력
The starting and ending numbers are defined as 1 and 75 The prime numbers between the interval 1 and 75 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73