k-th divisor_Codeforces

来源:互联网 发布:05年nba总决赛数据 编辑:程序博客网 时间:2024/04/29 16:18

Ok,声明下2017年2月10日23:27:51 这两天因为她和朋友,一直没有做题,也可能自己太懒散
这题让我记住的关键就是:转换说明符:%lld 丢了!然后便一错再错,错一次还要修一次电脑,开心的不得了
嗯,这款华硕笔记本,一直出网络故障(以至于打开网页一度失败),并且自己状态不佳,像个无头苍蝇 所以不得不苦笑承认,自己真是个Loser。

Ok,说下解题步骤 : 特别声明下:一个整数的因子个数有两种情况: 1). 比如 36 ,它有6 ,因子数:1 2 3 4 6 . 然后
4->9 3->12 2->18 1->36 ,而 6 是单独的,No : 2*t-1 2). 比如 12 , 因子数 : 1 2 3
. 然后 3->4 2->6 1-> 12 , No: 2*t 先行判断:如果是 前一半因子 ,直接 输出 结束 否则,就输出
前一半因子的相对一半(利用num数组保存,下标值应为:总和减去 K)

代码如下:

#include <stdio.h>#define maxn 10000000long long num[maxn]; int main(){    long long n,k,i,t;    scanf("%lld %lld",&n,&k);    bool flag=0;    for(t=0,i=1;i*i<=n;i++){        if(n%i==0){            if(i*i!=n)                num[t]=n/i;            else                flag=1;            t++;            if(t==k){                printf("%lld\n",i);                return 0;            }        }    }    if(!flag&&k<=2*t)        printf("%lld\n",num[2*t-k]);       else if(flag&&k<=2*t-1)        printf("%lld\n",num[2*t-1-k]);      else        printf("-1\n");             return 0;}
0 0
原创粉丝点击