好きをブチ抜く

「好き」をブチ抜く

本、映画、科学、哲学、心理、すごい人の考え方など。あらゆる情報を編集したい。

Python フィボナッチ数 数値の各桁の和

Q11フィボナッチ数列

フィボナッチ数列のうち、各桁の数字を足した数で割り切れる数を、以下の例に続けて小さい方から5個求めてください。

21 21 / (2+1) = 7

144 144 / (1 + 4 + 4) = 16

フィボナッチ数列python
#フィボナッチ数を2**31まで表示する
a = b = 1
while a < 2**31:
    print (a)
    i = a+b
    a = b
    b = i
def fib(n):
    a, b = 0, 1
    for i in range(n):
        a, b = b, a + b
    return b
数値の各桁の和の求め方

map関数を用いると、一つの要素に対する処理をリスト全体に対して行ってくれる。
第一引数が関数(またはlambda式)、第二引数がシーケンス。

map関数についてはこちら。
https://openbook4.me/sections/877

s = "123456"
s2 = list(s)
print(s2)

>>['1', '2', '3', '4', '5', '6']

s3 = list(map(int, list(s2)))
print(s3)

>>[1, 2, 3, 4, 5, 6]

s4 = sum(s3)
print(s4)

>>21
解答

countで上限を設定

def KetaSum(n):
    s = str(n)
    array = list(map(int, list(s)))
    return sum(array)

a = b = 1
count = 0
while count < 13:
    if (a % KetaSum(a)) == 0:
        print(a)
        count += 1
    i = a+b
    a = b
    b = i


>>
1
1
2
3
5
8
21
144
2584
14930352
86267571272
498454011879264
160500643816367088