You are given two integers n and k. Find k-th smallest divisor of n, or report that it doesn't exist.
Divisor of n is any such natural number, that n can be divided by it without remainder.
The first line contains two integers n and k (1 ≤ n ≤ 1015, 1 ≤ k ≤ 109).
If n has less than k divisors, output -1.
Otherwise, output the k-th smallest divisor of n.
4 2
2
5 3
-1
12 5
6
In the first example, number 4 has three divisors: 1, 2 and 4. The second one is 2.
In the second example, number 5 has only two divisors: 1 and 5. The third divisor doesn't exist, so the answer is -1.
题意:
给出整数 n 的第 k 个因数。(因数递增排列)
思路:
模拟就好了,但是卡在了32组数据。。。。原本就想过来水道题,大过年的多尴尬昂。
WA CODE:
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#define BadBoy main()
#define ForMyLove return 0;
using namespace std;
const int MYDD = 1103 + 1e5;
typedef __int64 LL;
LL ans[MYDD];
int BadBoy {
LL n, k;
scanf("%I64d %I64d", &n, &k);
int tmp = (int)sqrt(n), cnt = 1;
for(int j = 1; j <= tmp; j++){
if(n%j == 0){
ans[cnt] = (LL)j;
cnt++;
if(j * j == n) break;
ans[cnt] = (LL)n/j;
cnt++;
}
}
cnt--;
// printf("-> %d\n", cnt);
if(k <= cnt){
sort(ans+1, ans+1+cnt);
printf("%I64d\n", ans[k]);
} else {
printf("-1\n");
}
ForMyLove
}
数据项:
22876792454961 28
2541865828329
7625597484987
wrong answer expected '7625597484987', found '2541865828329'