この本から出題
プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
- 作者: 増井敏克
- 出版社/メーカー: 翔泳社
- 発売日: 2015/10/16
- メディア: Kindle版
- この商品を含むブログ (9件) を見る
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