数据范围
1≤n≤1015,
1≤k≤109。
输入样例1:
4 2
输出样例1:
2
输入样例2:
5 3
输出样例2:
-1
数据范围不是特别大,直接处理出所有的因子,先算出sqrt(n)内所有的因子,再用这些因子推出后面的因子,时间复杂度O(sqrt(n)),注意开long long !
AC代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[10000007];
int main(){
ll n;
int k;
scanf("%lld %d", &n, &k);
int tot = 0;
for(ll i = 1; i * i <= n; ++ i){
if(n % i == 0){
a[++tot] = i;
}
}
int q = tot;
if(n / a[tot] != a[tot])a[++q] = n / a[tot];
for(int i = tot - 1; i >= 1; -- i){
a[++q] = n / a[i];
}
tot = q;
if(tot >= k)printf("%lld\n", a[k]);
else printf("-1\n");
}