본문 바로가기
Develop/백준 (Cpp)

[백준] 2501번 : 약수 구하기 (C++)

by Tarra 2023. 1. 20.

2501번 : 약수 구하기


문제 )

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

 

 

 

 

풀이)

 

for문을 이용해 나머지가 0일 경우 count를 하나씩 올림으로써 몇번째 약수인지 확인해주었다.

 

k번째 약수가 있음을 확인했을 경우 해당 약수를 출력하고 `exit`를 이용하여 프로그램을 종료했다.

 

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
#include <iostream>
 
using namespace std;
 
int main()
{
    int n, k;
    cin >> n >> k;
 
    int count = 0;
 
    for (int i = 1; i < n + 1; i++) {
        if (n % i == 0) {
            count++;
        }
 
        if (count == k) {
            cout << i;
            exit(0);
        }
    }
 
    cout << 0;
 
    return 0;
}
 
cs

출처 : https://www.acmicpc.net/problem/2501 

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net