촉촉한초코칩

[백준] 2501(약수 구하기) c언어 본문

Algorithm

[백준] 2501(약수 구하기) c언어

햄친구베이컨 2023. 5. 21. 16:21

문제

어떤 자연수 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을 출력하시오.

 


 

    1. 먼저 n과 k를 입력받고, n 만큼 배열 공간(num)을 생성한다. 
    2. 그리고 임시 변수 tmp도 0으로 초기화한다. 
    3. n만큼 반복문을 돌려서 n과 반복문 변수 i를 나눠서 0이 되면,
    4. num의 tmp번째 요소에 i를 넣고 tmp는 1 증가시킨다.
    5. for문을 나오고 나면 n의 약수는 num 배열에 오름차순으로 저장되어 있다. 
    6. 그러면 바로 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