22-1다음 C 프로그램의 출력 결과를 적으시오.#include <… | 2022년 정보처리기사실기 1회차 기출문제 상세 페이지
6
22-1
다음 C 프로그램의 출력 결과를 적으시오.
#include <stdio.h>
int prime(int n) {
if (n < 2)
return 0;
for (int d = 2; d * d <= n; d++)
if (n % d == 0)
return 0;
return 1;
}
int main(void) {
int target = 1122, answer = 0;
for (int k = target; k >= 2; k--) {
if (target % k == 0 && prime(k)) {
answer = k;
break;
}
}
printf("%d", answer);
return 0;
}해설
17
[해설]
k를 target부터 1씩 줄이다가 target의 약수이면서 소수인 첫 값에서 break하므로, 이 프로그램은 가장 큰 소인수를 구한다.
1122 = 2 × 3 × 11 × 17
17을 넘는 약수 1122·561·374·187·102·66·51·34·33·22는 모두 합성수라 처음 만나는 소수 약수는 17이다.
prime 함수는 d × d ≤ n인 범위까지만 나눠 봐도 소수인지 충분히 판정할 수 있다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.