소개
이 실습에서는 C 프로그래밍에서 숫자가 소수인지 확인하는 방법을 배웁니다. 이 실습은 세 단계로 구성됩니다. 사용자로부터 정수 입력을 받고, 2 부터 입력 숫자의 제곱근까지의 수로 나누어지는지 검사하고, 숫자가 소수인지 아닌지 출력하는 것입니다. 이 실습을 마치면 주어진 정수의 소수성을 판별할 수 있는 작동하는 프로그램을 갖게 될 것입니다.
이 실습은 scanf() 함수를 사용하여 사용자로부터 정수 입력을 받는 방법을 가르치면서 시작합니다. 그런 다음 입력 숫자의 제곱근까지 2 부터 나누어지는지 검사하는 소수 판별 알고리즘을 소개합니다. 나누어지는 수가 없으면 숫자는 소수로 간주됩니다. 마지막으로 프로그램은 숫자가 소수인지 아닌지 나타내는 결과를 출력합니다.
정수 입력
이 단계에서는 C 프로그래밍에서 사용자로부터 정수 입력을 받는 방법을 배웁니다. 이것은 소수 검사 프로그램을 만드는 첫 번째 단계입니다.
먼저 소수 검사 프로그램을 위한 새로운 C 파일을 생성해 봅시다.
cd ~/project
nano prime_checker.c
이제 정수를 읽는 코드를 작성해 봅시다.
#include <stdio.h>
int main() {
int number;
printf("소수 여부를 확인할 양의 정수를 입력하세요: ");
scanf("%d", &number);
printf("입력한 숫자: %d\n", number);
return 0;
}
예시 출력:
소수 여부를 확인할 양의 정수를 입력하세요: 17
입력한 숫자: 17
코드를 자세히 살펴보겠습니다.
#include <stdio.h>는 표준 입력/출력 라이브러리를 포함합니다.int main()은 프로그램 실행이 시작되는 주 함수입니다.int number;는 사용자 입력을 저장할 정수 변수를 선언합니다.printf()는 사용자에게 프롬프트를 표시합니다.scanf()는 사용자로부터 정수 입력을 읽어number에 저장합니다.printf()는 사용자가 입력한 숫자를 확인합니다.
프로그램을 컴파일하고 실행해 봅시다.
gcc prime_checker.c -o prime_checker
./prime_checker
2 부터 √n 까지의 나누어 떨어짐 검사
이 단계에서는 입력 숫자의 제곱근까지 2 부터 나누어 떨어지는지 검사하여 소수 판별 알고리즘을 구현합니다.
이전 C 프로그램을 수정하여 소수 판별 논리를 추가해 봅시다.
nano ~/project/prime_checker.c
나누어 떨어짐 검사를 추가한 코드는 다음과 같습니다.
#include <stdio.h>
#include <math.h>
int is_prime(int number) {
// 2 보다 작은 수는 소수가 아닙니다.
if (number < 2) {
return 0;
}
// 2 부터 숫자의 제곱근까지 나누어 떨어지는지 검사
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
return 0; // 나누어 떨어지면 소수가 아닙니다.
}
}
return 1; // 나누어 떨어지는 수가 없으면 소수입니다.
}
int main() {
int number;
printf("소수 여부를 확인할 양의 정수를 입력하세요: ");
scanf("%d", &number);
if (is_prime(number)) {
printf("%d은 소수입니다.\n", number);
} else {
printf("%d은 소수가 아닙니다.\n", number);
}
return 0;
}
수학 라이브러리와 함께 프로그램을 컴파일합니다.
gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm
예시 출력:
소수 여부를 확인할 양의 정수를 입력하세요: 17
17은 소수입니다.
소수 여부를 확인할 양의 정수를 입력하세요: 20
20은 소수가 아닙니다.
구현에 대한 주요 내용:
<math.h>의sqrt()함수는 제곱근을 계산합니다.- 알고리즘을 최적화하기 위해 √n 까지의 나누어 떨어짐만 검사합니다.
- 나누어 떨어지는 수가 없으면 숫자는 소수입니다.
- 나머지 연산자
%는 나누어 떨어지는지 확인합니다. - 소수가 아니면 0 을, 소수이면 1 을 반환합니다.
소수 여부 출력
이 마지막 단계에서는 소수 판별 프로그램을 개선하여 더 자세한 출력을 제공하고 여러 숫자를 검사할 수 있도록 합니다.
프로그램을 수정하여 더 포괄적인 출력을 제공해 봅시다.
nano ~/project/prime_checker.c
개선된 인터페이스를 가진 코드를 업데이트합니다.
#include <stdio.h>
#include <math.h>
int is_prime(int number) {
// 2 보다 작은 수는 소수가 아닙니다.
if (number < 2) {
return 0;
}
// 2 부터 숫자의 제곱근까지 나누어 떨어지는지 검사
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
return 0; // 나누어 떨어지면 소수가 아닙니다.
}
}
return 1; // 나누어 떨어지는 수가 없으면 소수입니다.
}
void print_prime_details(int number) {
if (is_prime(number)) {
printf("%d은 (는) 소수입니다!\n", number);
printf("설명:\n");
printf("- 1 과 자기 자신으로만 나누어집니다.\n");
printf("- 2 와 √%d 사이에 다른 약수가 없습니다.\n", number);
} else {
printf("%d은 (는) 소수가 아닙니다.\n", number);
// 가장 작은 약수를 찾아 출력
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
printf("설명:\n");
printf("- %d로 나누어집니다.\n", i);
printf("- %d × %d = %d\n", i, number / i, number);
break;
}
}
}
}
int main() {
int number, continue_check;
do {
printf("소수 여부를 확인할 양의 정수를 입력하세요: ");
scanf("%d", &number);
print_prime_details(number);
printf("\n다른 숫자를 확인하시겠습니까? (1=예, 0=아니오): ");
scanf("%d", &continue_check);
} while (continue_check == 1);
printf("소수 판별기를 사용해 주셔서 감사합니다!\n");
return 0;
}
프로그램을 컴파일합니다.
gcc ~/project/prime_checker.c -o ~/project/prime_checker -lm
예시 출력:
소수 여부를 확인할 양의 정수를 입력하세요: 17
17은(는) 소수입니다!
설명:
- 1과 자기 자신으로만 나누어집니다.
- 2와 √17 사이에 다른 약수가 없습니다.
다른 숫자를 확인하시겠습니까? (1=예, 0=아니오): 1
소수 여부를 확인할 양의 정수를 입력하세요: 20
20은(는) 소수가 아닙니다.
설명:
- 2로 나누어집니다.
- 2 × 10 = 20
다른 숫자를 확인하시겠습니까? (1=예, 0=아니오): 0
소수 판별기를 사용해 주셔서 감사합니다!
주요 개선 사항:
- 소수와 소수가 아닌 경우에 대한 자세한 설명을 추가했습니다.
- 여러 숫자를 검사할 수 있도록 반복문을 구현했습니다.
- 숫자의 성질에 대한 더 교육적인 출력을 제공합니다.
요약
이 실험에서는 C 프로그래밍에서 사용자로부터 정수 입력을 받는 방법을 배웠습니다. 이는 소수 판별기를 만드는 첫 번째 단계입니다. 그런 다음 입력 숫자의 제곱근까지 2 부터 나누어 떨어지는지 검사하여 소수 판별 알고리즘을 구현했습니다. 이 프로그램은 주어진 숫자가 소수인지 확인하기 위해 2 부터 해당 숫자의 제곱근까지의 숫자를 반복하여 숫자를 나누었을 때 나머지가 0 인지 확인합니다. 나누어 떨어지는 수가 없으면 해당 숫자는 소수로 간주됩니다.



