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 10000000
long 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;
}