Project Euler 24, 25
24番
0~9の順列の100万番目を求める問題
#!/usr/bin/env python # -*- coding: utf-8 -*- num_list = range(0,10) #0から数え始める Order = 1000000 Order -= 1 ans = 0 for i in range(0,10): tmp = 1 for j in range(1,10 - i): tmp *= j ans = ans * 10 + num_list[Order / tmp] num_list.pop(Order / tmp) Order = Order % tmp print ans
25番
1000桁になるフィボナッチ数列の番目を求める問題
#!/usr/bin/env python # -*- coding: utf-8 -*- Fn = [1] Fn_1 = [1] iterate = 2 while 1: C = 0 save = Fn[:] for i in range(0,len(Fn_1)): Fn[i] = Fn[i] + Fn_1[i] + C C = Fn[i] / 10 Fn[i] = Fn[i] % 10 if len(save) > len(Fn_1): Fn[len(Fn)-1] += C C = 0 if C > 0: Fn.append(C) Fn_1 = save iterate += 1 if len(Fn) >= 1000: break print iterate
リストをコピーするには
a = b
じゃなくて
a = b[:]
でやらないとbの値変えた時aの中身も変化してしまう
変数に1000桁入らないんじゃないかと思ってリストでやったけどそんなことなかったみたい。だから
def f(n): x = 1 y = 1 z = 2 while 1: x,y,z = x+y,x,z+1 if len(str(x)) >= n: break return z print f(1000)
の方が簡単だし速い