Description
求一个数N的第k大的因子,如果这个数的因子少于k个,则输出-1。
Input
输入正整数N。
1<=N<=1000000000000,1<=k<=20
多组数据,cas<=10000
1<=N<=1000000000000,1<=k<=20
多组数据,cas<=10000
Output
N的第k大的因子。
Sample Input
6 2
10 5
100 5
1000 5
10 5
100 5
1000 5
Sample Output
3
-1
10
125
-1
10
125
代码:
#include<iostream>
#include<math.h>
using namespace std;
int main(){
long long n;
int a[100001],j,k,flag;
while(cin>>n>>k){
flag=0,j=1;
for(int i=1;i<=sqrt(n*1.0);++i) //只存储一半的因子
if(n%i==0)
a[j++]=i;
j--;
if(a[j]*a[j]==n) //如果有奇数个因子
flag=1;
if(2*j-flag<k)
cout<<"-1"<<endl;
else if(k<=j)
cout<<n/a[k]<<endl;
else if(flag==0)
cout<<a[2*j-k+1]<<endl;
else
cout<<a[2*j-k]<<endl;
}
}