DY N DY

실력키우기 약수구하기(C++) 본문

PARK/ALGORITHM

실력키우기 약수구하기(C++)

손세지 2016. 5. 3. 22:37

1402 : 약수 구하기

제한시간: 1Sec    메모리제한: 32mb
해결횟수: 1270회    시도횟수: 2167회   



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


 [Copy]
6 3
 [Copy]
3



 [Copy]
25 4
 [Copy]
0



 [Copy]
2735 1
 [Copy]
1




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
28
29
30
31
32
33
34
35
/**************************************************************
    Problem: 1402
    User: a132034
    Language: C++
    Result: Success
    Time:0 ms
    Memory:1740 kb
****************************************************************/
 
 
#include    <iostream>
using namespace std;
 
int main()
{
    int N, K;
 
    cin >> N >> K;
 
    int count = 0;
    for (int i = 1; i <= N; ++i)
    {
        if (N%i == 0)
        {
            count++;
            if (count == K){
                cout << i;
                return 0;
            }
        }
    }
    cout << 0;
 
    return 0;
}


차근차근 읽어보면 어려운 문제는 아니다. 

1부터 N까지 차례대로 입력받은 N으로 나누어 보며 약수를 구하고, K번째 약수에 도달하면 출력하고 종료한다. 

만약 for loop를 지나는 동안 출력하고 프로그램이 종료되지 않는다면 K번째 약수가 존재하지 않는 것이므로 0을 출력하고 종료한다.


'PARK > ALGORITHM' 카테고리의 다른 글

알고리즘 내리막길(JAVA)  (0) 2016.05.08
실력키우기 10진수를 2 8 16진수로(C++)  (0) 2016.05.08
실력키우기 선택정렬(C++)  (0) 2016.05.03
실력키우기 후위표기법(JAVA)  (0) 2016.05.02
실력키우기 수열(JAVA)  (0) 2016.04.29