给定两个整数 和
,请你找到并输出能够整除
的第
输入格式
一行,两个整数 和
。
输出格式
输出能够整除 的第
如果不存在,则输出 。
数据范围,
。
输入样例1:
4 2
输出样例1:
2
输入样例2:
5 3
输出样例2:
-1
解法一:
#include<iostream>
#include<vector>
using namespace std;
typedef long long LL;
LL n, k;
int main(){
cin >> n >> k;
LL cnt = 0;
vector<LL> res;
bool flag = false;
for(int i = 1; i <= n / i; i++){
if(n % i == 0) cnt++, res.push_back(i);
if(cnt == k) {
cout << i << endl;
return 0;
}
}
LL sum = cnt * 2;
if(res.back() * res.back() == n) sum--;
if(sum < k) cout << -1 << endl;
else {
int x = 2 * (LL)res.size() - k;
if(res.back() * res.back() == n) x--;
cout << n / res[x] << endl;
}
return 0;
}
解法二:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;
LL n, k;
int main(){
cin >> n >> k;
vector<LL> v;
for(int i = 1; i <= n / i; i++){
if(n % i == 0) {
v.push_back(i);
if(i != n / i) v.push_back(n / i);
}
}
if(v.size() < k) cout << -1 << endl;
else {
sort(v.begin(), v.end());
cout << v[k - 1] << endl;
}
return 0;
}