3783. 第 k 个除数
这题拿出来讲是因为我接触这题时看到数据范围就没有思路啦!后来一看解析发现居然很简单!!!
遍历所有处于 [1,sqrt(n)] 区间内的数 i ,若可以被 n 整除,则该数字和其对应的商 n/i 均可被 n 整除,将这两个数存入数组(要注意相等的情况)。
输出数组第 kk 小的数即可.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n,k;
scanf("%lld%lld",&n,&k);
vector<ll> v;
for(ll i=1;i<=sqrt(n);i++){
if(n%i==0){
v.push_back(i);
if(i!=n/i) v.push_back(n/i);
}
}
sort(v.begin(),v.end());
if(v.size()<k) cout << "-1" << endl;
else cout << v[k-1] << endl;
return 0;
}