Eine Einheitsfraktion ist eine Fraktion, deren Molekül 1 ist. Die Einheitsfraktion, deren Nenner 2 bis 10 ist, wird wie folgt in Dezimalzahlen ausgedrückt.
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) ist die Zahl 0,166666 ... und hat einen einstelligen Kreisknoten. Ein 1/7 Kreiskreis hat sechs Ziffern.
Finden Sie d so, dass der kreisförmige Knoten des Bruchteils der längste in 1 / d ist, wobei d <1000 ist. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2026
(1) Die Länge des Kreisknotens des Bruchteils von 1 / d ist der Punkt, an dem d das Minimum n ist, das 10 ^ n-1 teilt. (2) Faktoren wie 2, 5 tragen nicht zur Länge der Zirkeltheorie des Bruchteils bei. Ich habe den folgenden Code unter der Voraussetzung dieser beiden Punkte geschrieben (siehe Beilage). Da die drei Punkte get_prime_boolean und get_prime_listm get_primes in mymath gespeichert sind, können Sie auf sie verweisen.
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