【带除法的取模运算】hnoi2009有趣的数列

题目本身很简单,有意识的人会打个表轻易地可以发现是个卡特兰数列。

        众所周知卡特兰数列的最普通的递推式是O(N^2)的,数据规模是1000000,很显然过不了,卡特兰数列第i项还有另外一个公式就是C(n,2n)/(n+1),这个除法怎么办?我们所知的取模运算是不满足除法的,那应该怎么办?一个最直观的想法就是分解质因数,然后对于每一个质数分别求出它的指数。通过对每个数进行质因数分解是不现实的,复杂度高达O(N^1.3),1000000的数据显然过不了。

        ly给了我一个非常漂亮的算法:假设现在我对于数字 i ,要把他的 j 次方加到答案中去,若k是 i 的一个质因子,那么我只要把任务交给k和i/k就可以了,因为i^j=k^j+(i/k)^j,轮到算k或者i/k的时候只要把他的指数+上 j 即可,如果 i 是质数,直接加答案即可,因为最后的答案为整数,那么必定i的指数是正数。

        至此我们的任务就只有对于数据规模中的数求出它的一个质因子即可,这让我们想到了复杂度优秀的筛选法(O(N)),至此此题完美解决,而且算法非常漂亮!!

 

 

倾情感谢ly童鞋!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值