给出两个数字l和r。需要找到最长几何级数的长度,它由区间[l,r]中的l和r - int-numbers之间的一些数字组成。 请注意,几何级数的比率可以是非整数。
例如,l = 11,r = 29.最长序列可以是12 18 27,比率为3/2
由于
答案 0 :(得分:1)
我们有r = q**(n - 1) * l
,即r
等于n - 1
次l
次幂的比率,其中n
是系列中的术语数量
假设进展的元素必须是正整数
假设我们有一个固定的l
。为了获得整数,该比率必须是有理数a / b
(gcd(a, b) == 1
),b
是l
的因子。
如果b
l
出现k
,那么所需的进展最多可包含k
个元素。 k+1
不会是整数,因为它不再具有b
因子。
然后我们选择a
为最小a > b
。这只是a = b+1
。因此,该比率始终为(b + 1) / b
。
这表明给定l
的以下算法:
找到l
。
对于每一个d
。
使用等于(d+1) / d
的比率查找可能的术语数。由于几何级数的增长速度很快,因此您可以使用简单的循环while current <= r and term is integer
。或者你可以这样找n
:
r = q**(n - 1) * l
r / l = q**(n - 1)
n - 1 = log base q of (r / l)
n = int(log base q of (r / l)) + 1
但请记住,您还必须考虑这将生成多少整数项。您可以通过跟踪每个素数因子在d
中显示的功效来实现。
对于12
,我们有12 = 2**2 * 3
。
对于2
,我们的比率等于(2+1)/2 = 3/2
和3
条款。
对于3
,我们的比率等于4/3
且只有两个词:12, 16
(下一个不会是整数)。
对于4
,我们的比率等于5/4
和12, 15
这两个词。
对于6
,我们的比率等于7/6
,条款12, 14
。