本题题意:
在给定区间中选择序列,使得任意两数之间存在整除关系。
1.求满足条件的序列的最大长度。
2.求满足最大长度的序列个数
一:
求解最大长度基本思想是贪心。
我们只需要选择左端点 l 为起始数据,选择不为一的最小乘数2进行累乘即可。结束条件是末数据大于r,此时序列长度最大。
二:
求满足最大长度的序列个数时需要一点思维,下举例说明。
我们可以将(一)中贪心所求的最长序列作参照
该序列为
X X×2 X×2×2 X×2×2×2……X×2^n <=R
我们将数值按累乘的因子展开(可能看起来更容易理解)后面的因式是要包含前面的因式的。
这时我们不难发现按②累乘的最后一项与右端点间可能存在着较大差距。鉴于右边存在灵活的一段区间,我们可以做以下考虑推导其他满足条件的序列
1.不改变累成部分的因子,仅修改起点,让整个序列逼近右端点。cnt1=r/2^n–l+1
2.可将最后一项的累乘因子变为③判断是否未超界,(只能是③的原因:该序列是贪心求得的最长序列,末项✖️2是超界的,只有变②为③有可操作空间,当然也不会影响其向前的包容关系)如未超界,则又可以重复1的操作向前改变起点以求得新的序列,同时亦可变换因子③在序列中的位置形成新的序列(eg:X X×2 X×2×3 X×2×3×2……X×2^(n–1)×3 )cnt2=(r/(2^(n–1)×3 )–l+1)×(n–1)