0
点赞
收藏
分享

微信扫一扫

第 k 个除数(秋季每日一题 15)

洛茄 2022-10-08 阅读 109


给定两个整数 ,请你找到并输出能够整除 的第

输入格式
一行,两个整数

输出格式
输出能够整除 的第

如果不存在,则输出

数据范围

输入样例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;
}


举报

相关推荐

0 条评论