smoj 1069 Antiprime数 (http://218.5.241.13:8060/oj/showProblem.jsp?pid=1069)

一、定义:如果一个数m,它的约数个数大于任何一个比m小的自然数的约数个数,那么称这种数为Antiprime数。譬如:1、2、4、6、12和24。

二、定理 设m=2^t1×3^t2 ×……×p^tk(其中p是第k大的素数)是Antiprime数,则必有t1≥t2≥t3≥……≥tk≥0。

用反证法证。(略)

三、分析

1、由于n可以达到2*10^9,所以用枚举法会超出时间复杂度。

2、当n=2*10^9时,Antiprime数仅有1456个。所以可以把所有此类的数搜索并存储下来,同时记录下每个数的约数个数。把它们从小到大排序后,再逐一判断哪些是Antiprime数,取最大值即可。如n=15,则满足条件的数是1、2、4、6、和12,其约数个数分别是1、2、3、4、4和6,所以不大于15的Antiprime数有1、2、4、6、12,其中最大值是12。

4、因为2^31接近2*10^9,所2的指数从31、30……往下搜。用回溯法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值