Project Euler 26, 27
26番
最長の循環小数を求める問題
#!/usr/bin/env python # -*- coding: utf-8 -*- max_ite = 0 max_d = 0 for i in range(2,1000): iterate = 0 rest = 1 rest_list = [] while 1: rest = rest * 10 % i iterate += 1 if rest == 0 or rest in rest_list: break rest_list.append(rest) if iterate > max_ite: max_ite = iterate max_d = i print max_d
27番
二次式で素数が続く際の係数を求める問題
aは奇数,bは素数という条件のもとブルートフォースで解いたけどなんかもっといい方法ないかなあ
#!/usr/bin/env python # -*- coding: utf-8 -*- #aは奇数,bは素数 def f(n,a,b): return n * n + a * n + b def issosu(x): for i in range(3,x,2): if x % i == 0: return False return True def make_b(n): b_list = range(2,n) b = [] while b_list != []: sosu = b_list[0] b.append(b_list[0]) sub_list = [] for i in b_list: if i % sosu != 0: sub_list.append(i) b_list = sub_list[:] return b max_len = 0 b_list = make_b(1000) max_a = 0 max_b = 0 for a in range(-999,1001,2): for b in b_list: n = 1 while f(n,a,b) > 0 and issosu(f(n,a,b)): n += 1 if n > max_len: max_a = a max_b = b max_len = n print max_a*max_b