题目很简单:给n,k,问n的第k个因数,若没有输出-1,。但是n很大。。
分析:这种题自己以前应该有想过根号,这次也许也想了,但是一下子就过了,然后想了别的错误的想法,结果去了解别的东西。。(直接复制别人的描述好了)
可以只枚举sqrt(n);
因子是成对出现的;
所以i是n的因子
n/i也是n的因子;
注意i*i=n的情况就好;
对于小于sqrt(n)的放在v里面,大于sqrt(n)的放在vv里面;
v是升序的,vv是降序的;因为n/i=x (i< sqrt(n),则x>sqrt(n))
然后根据k和两个v的size的关系.控制输出就好;
(一个数的因子不会那么多的,就算1e15,也没超过1000个因子)
不过要注意的是,我在cf上提交了,总是说sqrt错误,所以可以通过 i*i<=n来判断比较好。
虽然自己多看了如何用优先队列。。