与えられた2つの数字lとr。区間[l、r]のlとr - int間のいくつかの数からなる最も長い幾何学的な進行の長さを見つける必要がある。 幾何学的な進行の比は非整数であってもよいことに注意してください。幾何学的進行についての厄介な作業
例えば、L = 11、R = 29、最長シーケンスは比で12 18 27であることができるが3/2
おかげ
与えられた2つの数字lとr。区間[l、r]のlとr - int間のいくつかの数からなる最も長い幾何学的な進行の長さを見つける必要がある。 幾何学的な進行の比は非整数であってもよいことに注意してください。幾何学的進行についての厄介な作業
例えば、L = 11、R = 29、最長シーケンスは比で12 18 27であることができるが3/2
おかげ
我々はr = q**(n - 1) * l
を持って、それはr
あるいくつかのパワーとの比に等しいです。 n - 1
times l
ここで、n
はシリーズ内の用語の数です。正の整数
でなければならない進行の要素を仮定し
たちは、固定l
を持っていると仮定します。整数を得るためには、比率はa/b
(gcd(a, b) == 1
)となるようにb
がl
のファクタでなければなりません。
b
がk
のl
に表示される場合、必要なプログレスバーは最大でk
個の要素を持つことができます。 k+1
thは整数ではなく、b
の係数を持たないためです。
次に、a > b
となるようにa
を最小にすることを選択します。これはちょうど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
になり、2つの語句:12, 16
(次は整数ではありません)があります。
4
については、5/4
の比率と12, 15
の比率があります。
6
の場合、私たちは7/6
に等しい比率と12, 14
という比率を持っています。
試しましたか? – luk2302
'12 18 27'は' 11'と '29'をどのように含んでいますか?おそらく 'l = 12'と' r = 27'でしょうか? – IVlad
与えられた 'l'で始まり、与えられた' r'で終わる必要がなければ、その比率を '1.00001'にすると、はるかに長い進行が得られます。 – IVlad