촉촉한초코칩
[백준] 2501(약수 구하기) c언어 본문
문제
어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.
6을 예로 들면
- 6 ÷ 1 = 6 … 0
- 6 ÷ 2 = 3 … 0
- 6 ÷ 3 = 2 … 0
- 6 ÷ 4 = 1 … 2
- 6 ÷ 5 = 1 … 1
- 6 ÷ 6 = 1 … 0
그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.
두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
출력
첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.
- 먼저 n과 k를 입력받고, n 만큼 배열 공간(num)을 생성한다.
- 그리고 임시 변수 tmp도 0으로 초기화한다.
- n만큼 반복문을 돌려서 n과 반복문 변수 i를 나눠서 0이 되면,
- num의 tmp번째 요소에 i를 넣고 tmp는 1 증가시킨다.
- for문을 나오고 나면 n의 약수는 num 배열에 오름차순으로 저장되어 있다.
- 그러면 바로 k번째 약수를 구할 수 있다.
#include <stdio.h>
int main(void) {
int n, k, tmp = 0;
scanf("%d %d", &n, &k);
int *num;
num = calloc(sizeof(int), n);
for(int i=1; i<=n; i++) {
if(n % i == 0) {
num[tmp] = i;
tmp += 1;
}
}
printf("%d\n", num[k-1]);
}
'Algorithm' 카테고리의 다른 글
[미해결] 2023 인하대학교 프로그래밍 경진대회(IUPC) (A-모비스) (0) | 2023.05.21 |
---|---|
[백준] 25305(커트라인) c언어 (0) | 2023.05.21 |
07. 집합 (0) | 2023.05.15 |
[백준] 9086(문자열) c언어 (0) | 2023.05.06 |
06. 정렬 (0) | 2023.05.05 |