소개
이 실습에서는 C 프로그램을 사용하여 정수를 소인수로 분해하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.
- 사용자로부터 정수 입력을 받습니다.
- 입력된 숫자가 완전히 소인수분해될 때까지 소수로 나누는 알고리즘을 구현합니다.
- 입력된 숫자의 소인수를 출력합니다.
이 실습을 마치면 정수, 소수 및 기본적인 C 프로그래밍 개념에 대한 이해도가 높아질 것입니다.
이 실습에서는 C 프로그램을 사용하여 정수를 소인수로 분해하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.
이 실습을 마치면 정수, 소수 및 기본적인 C 프로그래밍 개념에 대한 이해도가 높아질 것입니다.
이 단계에서는 소인수분해를 위한 C 프로그램에서 사용자로부터 정수 입력을 받는 방법을 배웁니다. 사용자에게 숫자를 입력하도록 요청하고, 이를 후속 처리를 위해 저장하는 간단한 프로그램을 만들 것입니다.
먼저 ~/project 디렉토리에 새로운 C 파일을 생성합니다.
cd ~/project
nano prime_factorization.c
이제 정수를 읽는 다음 코드를 추가합니다.
#include <stdio.h>
int main() {
int number;
printf("소인수분해할 양의 정수를 입력하세요: ");
scanf("%d", &number);
printf("입력한 숫자: %d\n", number);
return 0;
}
코드를 자세히 살펴보겠습니다.
#include <stdio.h>는 표준 입출력 라이브러리를 포함합니다.int main()은 프로그램 실행이 시작되는 주 함수입니다.printf()는 사용자에게 프롬프트를 표시하는 데 사용됩니다.scanf()는 사용자로부터 정수 입력을 읽습니다.%d는 정수 형식 지정자입니다.&number는 number 변수의 메모리 주소를 전달합니다.프로그램을 컴파일하고 실행합니다.
gcc prime_factorization.c -o prime_factorization
./prime_factorization
예시 출력:
소인수분해할 양의 정수를 입력하세요: 24
입력한 숫자: 24
이 단계에서는 이전 프로그램을 수정하여 소인수분해 알고리즘을 구현합니다. 입력된 숫자를 소수로 나누어 완전히 인수분해될 때까지 prime_factorization.c 파일을 업데이트합니다.
기존 파일을 엽니다.
cd ~/project
nano prime_factorization.c
이전 코드를 다음 구현으로 바꿉니다.
#include <stdio.h>
void factorize(int number) {
printf("%d의 소인수: ", number);
// 가장 작은 소수 (2) 부터 시작
for (int divisor = 2; divisor <= number; divisor++) {
while (number % divisor == 0) {
printf("%d ", divisor);
number /= divisor;
}
}
printf("\n");
}
int main() {
int number;
printf("소인수분해할 양의 정수를 입력하세요: ");
scanf("%d", &number);
// 유효한 입력 확인
if (number <= 1) {
printf("1 보다 큰 숫자를 입력하세요.\n");
return 1;
}
factorize(number);
return 0;
}
소인수분해 알고리즘을 자세히 살펴보겠습니다.
factorize() 함수는 소인수분해 과정을 처리합니다.for 루프는 각 가능한 약수를 시도합니다.while 루프는 현재 약수로 숫자를 반복적으로 나눕니다.프로그램을 컴파일하고 실행합니다.
gcc prime_factorization.c -o prime_factorization
./prime_factorization
예시 출력:
소인수분해할 양의 정수를 입력하세요: 24
24 의 소인수: 2 2 2 3
소인수분해할 양의 정수를 입력하세요: 100
100 의 소인수: 2 2 5 5
이 단계에서는 소수 인수분해 프로그램을 개선하여 소수 인수의 더 자세하고 형식화된 출력을 제공합니다. 기존의 prime_factorization.c 파일을 수정하여 결과의 표현을 개선합니다.
파일을 엽니다.
cd ~/project
nano prime_factorization.c
개선된 인수분해 함수로 코드를 업데이트합니다.
#include <stdio.h>
void factorize(int number) {
int original_number = number;
int factor_count = 0;
printf("%d의 소인수분해:\n", original_number);
printf("---------------------\n");
// 가장 작은 소수부터 시작
for (int divisor = 2; divisor <= number; divisor++) {
int current_factor_count = 0;
while (number % divisor == 0) {
number /= divisor;
current_factor_count++;
factor_count++;
}
// 지수와 함께 인수 출력
if (current_factor_count > 0) {
printf("%d^%d ", divisor, current_factor_count);
}
}
printf("\n\n소수 인수의 총 개수: %d\n", factor_count);
}
int main() {
int number;
printf("소인수분해할 양의 정수를 입력하세요: ");
scanf("%d", &number);
// 유효한 입력 확인
if (number <= 1) {
printf("1 보다 큰 숫자를 입력하세요.\n");
return 1;
}
factorize(number);
return 0;
}
이 버전의 주요 개선 사항:
프로그램을 컴파일하고 실행합니다.
gcc prime_factorization.c -o prime_factorization
./prime_factorization
예시 출력:
소인수분해할 양의 정수를 입력하세요: 24
24 의 소인수분해:
---------------------
2^3 3^1
소수 인수의 총 개수: 4
소인수분해할 양의 정수를 입력하세요: 100
100 의 소인수분해:
---------------------
2^2 5^2
소수 인수의 총 개수: 4
이 실험에서는 사용자로부터 정수 입력을 받고, 소인수분해 알고리즘을 구현하며, 주어진 숫자의 소수 인수를 출력하는 방법을 배웁니다. 주요 단계는 정수를 읽고, 숫자를 소수로 나누어 완전히 인수분해할 때까지 계속하고, 소수 인수를 출력하는 것입니다.
프로그램은 먼저 사용자에게 양의 정수를 입력하도록 요청하고, 이 값을 변수에 저장합니다. 소인수분해 알고리즘은 factorize() 함수에서 구현됩니다. 이 함수는 입력된 숫자를 소수로 나누어 완전히 인수분해될 때까지 계속합니다. 그런 다음 소수 인수가 콘솔에 출력됩니다.