762A k-th divisor

来源:互联网 发布:mac上怎么看腾讯视频 编辑:程序博客网 时间:2024/06/05 07:57

题目链接:

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 0x3f3f3f3ftypedef 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;        }    }}


0 0