【Codeforces 762A】 k-th divisor
【题目链接】
【算法】
我们知道,一个数的因子是成对出现的,一半小于等于sqrt(N),一半大于sqrt(N),因此,我们可以从
2..sqrt(N)枚举因子
【代码】
#include<bits/stdc++.h> using namespace std; #define MAX 3000000 typedef long long ll; ll i,l,n,k; ll a[MAX+10]; template <typename T> inline void read(T &x) { int f = 1; x = 0; char c = getchar(); for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; } for (; isdigit(c); c = getchar()) x = x * 10 + c - '0'; x *= f; } template <typename T> inline void write(T x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) write(x/10); putchar(x%10+'0'); } template <typename T> inline void writeln(T x) { write(x); puts(""); } int main() { read(n); read(k); for (i = 1; i <= sqrt(n); i++) { if (!(n % i)) { a[++l] = i; if (i * i != n) a[++l] = n / i; } } sort(a+1,a+l+1); if (k <= l) writeln(a[k]); else puts("-1"); return 0; }