본문 바로가기

C/함수와 변수

C언어 - 입력받은 정수를 소인수 분해하는 프로그램

호출할 때마다 가장 최근에 리턴한 소수 다음으로 큰 소수를 리턴하는 int getPrime(void) 함수를 작성하시오.

이 함수를 이용하여 사용자로부터 양의 정수를 입력 받아 그 소수를 소인수분해한 결과를 출력하는 프로그램을 작성하시오.

(Ex. 48 -> 2 2 2 2 3)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
 
int isPrime(int n) {
    for (int i = 2; i < n; i++) {
        if (n % i == 0return 0// n이 소수가 아니면 0 리턴
    }
    return 1// n이 소수이면 1 리턴
}
 
int getPrime(void) {
    static int num = 1;
    num++;
    while (isPrime(num) == 0++num;
    return num;
}
 
int main(void) {
    int n, i;
    scanf("%d"&n); // 사용자로부터 입력 받기
    for (i = getPrime(); i <= n; i++) {
        while (n % i == 0) {
            n = n / i;
            printf("%d ", i);
        }
    }
    return 0;
}
cs