💡
原文英文,约900词,阅读约需4分钟。
📝
内容提要
给定两个整数n和maxValue,理想数组的长度为n,元素范围在1到maxValue之间,且每个元素必须是前一个元素的倍数。通过组合数学和动态规划计算不同的理想数组数量,结果需对10^9 + 7取模。
🎯
关键要点
-
给定两个整数n和maxValue,描述理想数组的长度和元素范围。
-
理想数组的每个元素必须是前一个元素的倍数。
-
返回不同的理想数组数量,结果需对10^9 + 7取模。
-
示例1:n=2,maxValue=5,输出为10。
-
示例2:n=5,maxValue=3,输出为11。
-
理想数组是非递减的。
-
解决方案涉及组合数学和动态规划。
-
每个元素的质因数必须包含前一个元素的质因数。
-
使用组合计数计算有效序列的数量。
-
预计算阶乘和逆阶乘以高效计算组合数。
-
对每个值v,计算质因数的组合数乘积并求和。
-
该方法高效处理约束,避免暴力枚举所有可能的序列。
❓
延伸问答
什么是理想数组?
理想数组是长度为n,元素范围在1到maxValue之间,且每个元素必须是前一个元素的倍数的数组。
如何计算理想数组的数量?
通过组合数学和动态规划,计算每个值的质因数组合数乘积并求和,最后对10^9 + 7取模。
能给出理想数组的示例吗?
例如,n=2,maxValue=5时,理想数组有10种可能:[1,1], [1,2], [2,2]等。
理想数组的元素有什么限制?
理想数组的每个元素必须是前一个元素的倍数,并且是非递减的。
为什么要对结果取模?
因为理想数组的数量可能非常大,所以需要对10^9 + 7取模以避免溢出。
如何预计算阶乘和逆阶乘?
使用模运算预计算阶乘和逆阶乘,以便高效计算组合数。
➡️