您的位置:首页 > 其它

762A k-th divisor

2017-02-09 16:29 344 查看
题目链接:
http://codeforces.com/problemset/problem/762/A
题解:

算是简单题,需要注意的就是题目中给出的数据比较大,所以,我用的是折半处理的方法,只处理平方之前的数据,在用除法把剩下的数据给处理,这里还需要注意的是i*i==n,这里需要考虑一下。

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6+10;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
ll num[maxn];

int main()
{
ll n,k;
while(cin>>n>>k)
{
met(num,0);
ll ans=-1;
ll m=sqrt(n);
ll cnt=0,len=0;
for(ll i=1;i<=m;i++)
{
if(n%i==0)
{
cnt++;
num[len++]=i;
}
if(cnt==k)
{
ans=i;
cout<<ans<<endl;
break;
}
}
ll temp=cnt;
if(m*m==n)
temp--;
if(ans==-1)
{
ll flag=0;
ll i;
for(i=len-1;i>=0;i--)
{
temp++;
if(temp==k)
{
flag=1;
break;
}
}
if(flag)
ans=n/num[i];
cout<<ans<<endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: