2023년 1월 ~ 2월에 프로그래밍을 공부하기 위해 풀었던 문제들이다.
어떤 자연수 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을 출력하시오.
이번에도 역시 벡터를 사용하니 오류가 났는데, 6과3을 넣을 떄에는 문제가 없었지만 25와 4를 넣으니 문제가 생겼다. 아무래도 제한조건을 걸어두었지만 aliquot[small];
이 문제였던 것 같다. 입력된 숫자는 4인데 4번째 원소가 없으므로. 아무래도 벡터는 확실히 다루기가 어려운듯하다 ㅜㅜ
이렇게 제한 조건을 걸어 이상한 인덱스에 접근하게 하지 않았음에도 오류가 뜨는 것을 해결할 방법은 없는 것인지 궁금하다.
#include <iostream>
using namespace std;
#include <vector>
int main() {
int num, small;
cin >> num >> small;
vector<int> aliquot;
aliquot.push_back(0);
for (int i = 1; i <= num; i++) {
if (num % i == 0)
aliquot.push_back(i);
}
if (aliquot.size() < small)
cout << aliquot[0];
else
cout << aliquot[small];
}
#include <iostream>
using namespace std;
int main() {
int num, small, count = 0;
cin >> num >> small;
int aliquot[1000] = {0};
for (int i = 1; i <= num; i++) {
if (num % i == 0) {
aliquot[count+1] = i;
count++;
}
}
if (count < small)
cout << aliquot[0];
else
cout << aliquot[small];
}