关于几何级数的棘手任务

时间:2017-01-15 21:48:32

标签: algorithm math

给出两个数字l和r。需要找到最长几何级数的长度,它由区间[l,r]中的l和r - int-numbers之间的一些数字组成。 请注意,几何级数的比率可以是非整数。

例如,l = 11,r = 29.最长序列可以是12 18 27,比率为3/2

由于

1 个答案:

答案 0 :(得分:1)

我们有r = q**(n - 1) * l,即r等于n - 1l次幂的比率,其中n是系列中的术语数量

假设进展的元素必须是正整数

假设我们有一个固定的l。为了获得整数,该比率必须是有理数a / bgcd(a, b) == 1),bl的因子。

如果b l出现k,那么所需的进展最多可包含k个元素。 k+1不会是整数,因为它不再具有b因子。

然后我们选择a为最小a > b。这只是a = b+1。因此,该比率始终为(b + 1) / b

这表明给定l的以下算法:

  1. 找到l

  2. 的除数
  3. 对于每一个d

  4. 使用等于(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
    
  5. 但请记住,您还必须考虑这将生成多少整数项。您可以通过跟踪每个素数因子在d中显示的功效来实现。

    1. 选择一个给出最多条款的人。
    2. 对于12,我们有12 = 2**2 * 3

      对于2,我们的比率等于(2+1)/2 = 3/23条款。

      对于3,我们的比率等于4/3且只有两个词:12, 16(下一个不会是整数)。

      对于4,我们的比率等于5/412, 15这两个词。

      对于6,我们的比率等于7/6,条款12, 14