Une fraction unitaire est une fraction dont la molécule est 1. La fraction unitaire dont le dénominateur est 2 à 10 est exprimée en décimal comme suit.
1/2 = 0.5 1/3 = 0.(3) 1/4 = 0.25 1/5 = 0.2 1/6 = 0.1(6) 1/7 = 0.(142857) 1/8 = 0.125 1/9 = 0.(1) 1/10 = 0.1
0.1 (6) est le nombre 0.166666 ... et a un nœud circulaire à un chiffre. Un nœud circulaire 1/7 a six chiffres.
Trouvez d tel que le nœud circulaire de la partie fractionnaire est le plus long en 1 / d où d <1000. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2026
(1) La longueur du nœud circulaire de la partie fractionnaire de 1 / d est le point où d est le minimum n qui divise 10 ^ n-1. (2) Des facteurs tels que 2, 5 ne contribuent pas à la longueur de la théorie circulaire de la partie fractionnaire. J'ai écrit le code suivant en partant de ces deux points (voir supplément). Puisque les trois points de get_prime_boolean et get_prime_listm get_primes sont stockés dans mymath, vous pouvez vous y référer.
def get_prime_boolean(max):
bool = [False,False]+[True]*(max-1)
bool[4::2] = [False] * (len(bool[4::2]))
p = 3
p_max = int(math.sqrt(max))+1
while p<=p_max:
if bool[p]:
bool[p*2::p] = [False] * (len(bool[p*2::p]))
p+=2
return bool
def get_prime_list(bool):
length = len(bool)
return [i for i in range(2,length) if bool[i]]
def get_primes(max):
bool = get_prime_boolean(max)
list = get_prime_list(bool)
return {'bool':bool,'list':list}
def pe26():
MAX = 1000
seq = range(MAX)
ans = seq[3::10] + seq[7::10] + seq[9::10] + seq[11::10]
t = 9
while len(ans) > 1:
i = 0
while i < len(ans):
if (t%ans[i]) == 0:
ans.pop(i)
else:
i += 1
t = t*10 + 9
print ans[0]
import math
print math.log(t,10)
pe26()
Recommended Posts