문제 해결/BaekJoon

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

WSLim_97 2022. 12. 29. 20:57
반응형

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

 

2501번: 약수 구하기

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

www.acmicpc.net


코드

#include <iostream>
using namespace std;

int main()
{
	int n, k, i, count = 0;
	cin >> n >> k;

	for (i = 1; i <= n; i++)
	{
		if (n % i == 0)
		{
			count++;
		}
		if (count == k)
		{
			break;
		}
	}
	if (k > count)
		cout << "0" << endl;
	else
		cout << i << endl;

	return 0;
}

풀이

정수 n을 입력받아 n의 약수들 중 k번째로 작은 수를 출력하는 문제이다.

 

정수 n의 약수를 찾는 방법은 n을 어떤 값으로 나눈 나머지가 0이 되면 그 값이 약수이다.

 

약수를 찾을 때마다 count 변수를 1씩 증가시키고 그 값이 k와 같으면 반복문을 빠져나온다.

 

이때 k의 값이 count보다 크다면 k번째 약수가 존재하지 않는 것이므로 0을 반환하고 그렇지 않다면 정수 n의 k번째 작은 약수인 i를 출력한다.

반응형