知恵袋の群数列の問題をPythonで解いてみた。(2)

 知恵袋の群数列の問題をもう一問、Pythonで解いてみました。今度のはちょっと難しいかな。(^_^;

数列 1/1, 1/2, 2/2, 3/2, 1/3, 2/3, 3/3, 4/3, 5/3, 1/4・・・・
とあり、初項からK項までの和が200を超えるような最小値Kを求めなさい。

 第i群の項数は、2i-1 [個]で、第i群のj番目の項a_{ij}は、次式で表されます。
 a_{ij}=\frac{j}{i}
また、群数列の第i群のj番目の項が原数列の第k項だとすると、次式が成り立ちます。
 k=(i-1)^2+j
 ちなみに、第m群のn番目の項までの和Sは、次式のようになります。
 S=\sum_{i=1}^{m-1}\left(\sum_{j=1}^{2i-1}\frac{j}{i}\right)+\sum_{j=1}^{n}\frac{j}{m}=(m-1)^{2}+\frac{n(n+1)}{2m}
 (m-1)^2\lt S\leq m^2

● GrpSeq2.py

# coding: UTF-8
# GrpSeq2.py

from fractions import Fraction

def main():
    n = 0
    while 1:
        n+= 1
        a = [Fraction(j,i) for i in range(1,n+1) for j in range(1,2*i)]
        if sum(a)> 200: break
#   print(n)
    k=0
    while 1:
        k+= 1
        if sum(a[:k])> 200: break

    print(k)

if __name__ == '__main__':
    main()

●実行結果

207

Pythonスタートブック

Pythonスタートブック