호출할 때마다 가장 최근에 리턴한 소수 다음으로 큰 소수를 리턴하는 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 == 0) return 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 |
'C > 함수와 변수' 카테고리의 다른 글
C언어 - 16진수를 입력받아 2진수를 출력하는 프로그램 (0) | 2022.12.21 |
---|---|
C언어 - 달력 출력 프로그램 (0) | 2022.12.21 |
C언어 - 입력 받은 정수들의 최소공배수 출력하기 (0) | 2022.11.19 |
C언어 - 2차 방정식의 실수 근의 개수 반환하기 (0) | 2022.11.19 |
C언어 - 기하평균 조화평균 구하기 (0) | 2021.09.01 |