Q. 자연수 n개가 주어진다. 이 자연수의 공약수를 모두 구하는 프로그램을 작성하시오.
입력.
첫째 줄에 n이 주어진다. n은 2 또는 3이다. 둘째 줄에는 공약수를 구해야 하는 자연수 n개가 주어진다. 모든 자연수는 108 이하이다.
출력.
입력으로 주어진 n개 수의 공약수를 한 줄에 하나씩 증가하는 순서대로 출력한다.
처음에는 해결법을 다음과 같이 생각했다.
1. 입력받은 숫자를 소수로 나누고 그 횟수의 최솟값을 구한다.
2. 나누었던 소수와 그 횟수를 통해 나올 수 있는 수들을 오름차순으로 출력한다.
그런데 여기서는 두 번째 방식을 구현하는데 반복문을 사용하기 까다로워 어려움을 겪었다.
그러나 아래의 방식을 사용하면 간단히 문제를 해결할 수 있다.
" 1 ~ 입력받은 숫자 중 가장 작은 수를 나누어 공통적으로 나머지가 0인 숫자를 출력 "
#include <stdio.h>
int main(void) {
int i, min, n;
int arr[3] = {0, 0, 0};
scanf("%d", &n);
scanf("%d", &arr[0]);
min = arr[0];
if (n == 2)
scanf("%d", &arr[1]);
else
scanf("%d %d", &arr[1], &arr[2]);
for (i = 1; i < n; i++)
if (arr[i] < min)
min = arr[i];
for (i = 1; i <= min; i++)
if (arr[0] % i == 0 && arr[1] % i == 0 && arr[2] % i == 0)
printf("%d\n", i);
return 0;
}
'백준 알고리즘' 카테고리의 다른 글
[C언어] 2828번 (0) | 2020.05.21 |
---|---|
[C언어] 10709번 (0) | 2020.05.14 |
[C언어] 5533번 (0) | 2020.05.12 |
[C언어] 10817번 (0) | 2020.04.25 |
[C언어] 10250번 (0) | 2020.04.17 |