【2016.5.21普及组模拟】约数国王(A king)

【2016.5.21普及组模拟】约数国王(A king)


(File IO): input:king.in output:king.out

时间限制: 1000 ms 空间限制: 262144 KB 具体限制

Description
数学的王国里,有一些约数国王……约数国王的定义是这样的:一个大于1的整数n,如果它约数的个数比1~n-1的每个整数的约数的个数都要多,那么我们就称它为约数国王。聪明的小明在奥数书上认识了它们,于是产生了一个问题:他想知道L到R之间一共有多少个约数国王?它们分别又是谁?

Input
输入文件只有一行,包含一个l,一个r,表示小明想知道的范围。

Output
只有一行,第一个数h,表示l~r内一共有多少个约数国王,接下来h个从小到大的数(为了防止国王们打架,你需要按顺序输出。),表示约数国王分别是谁。

Sample Input
1 100

Sample Output
8 2 4 6 12 24 36 48 60

Data Constraint

  • 对于30%的数据,1<=l<=r<=200000。
  • 对于50%的数据,1<=l<=r<=500000。
  • 对于70%的数据,保证最大的约数国王的约数的个数不大于1000。
  • 对于100%的数据,1<=l<=r, 并且保证l,r在64位整型以内,最大的约数国王的约数的个数不大于200000。

解题思路


首先,我们设一个c[i],表示因数个数(包括本数)为i,的最小正整数,那么对于一个数c[i],如果c[i]<任何一个c[i+k] (k为正整数),那么c[i]就是一个约数国王。

对于求出c[i],我们可以设P[i]为从小到大的质数中的第i个。这里用线性筛法可以求出来。

我们可以在设一个F[i,j]表示,有i个不同质因数构成,有j个因数的最小正整数。
那么,c[i]=Max{F[k,i]}。

求一个数的因子个数的公式:
N=P1A1+P2A2+P3A3+...+PmAm 也就是 N=m</

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值