49/98 ist ein interessanter Bruchteil. Ein unerfahrener Mathematiker denkt fälschlicherweise: "Wenn Sie 9 von jedem Molekül und Nenner entfernen, erhalten Sie 49/98 = 4/8, was eine einfache Form sein kann." Es kann sein. (Die Methode ist nicht korrekt, aber im Fall von 49/98 ist es zufällig die richtige Reduktion.)
Wir gehen davon aus, dass Typen wie 30/50 = 3/5 selbsterklärende Beispiele sind.
Von diesen Fraktionen gibt es vier, die kleiner als eins sind und nicht selbstverständlich sind, wobei sowohl das Molekül als auch der Nenner zweistellige Zahlen sind.
Beantworten Sie den Wert des Nenners, wenn das Produkt der vier Fraktionen in reduzierter Form angegeben ist. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2033
Die Werte der beiden Fraktionen a1 / b1 und a2 / b2 sind gleich → a1//gcd(a1, b1) == a2//gcd(a2,b2) and b1//gcd(a1, b1) == b2//gcd(a2,b2) Ungefähre Minuten der Fraktionen a / b → (a//gcd(a,b)) / (b//gcd(a,b))
Es wurde auf der Grundlage der obigen Tatsachen angemessen codiert. Ich möchte es bald beheben (= ich werde es nicht tun)
def gcd(m,n):
if m < n:
(m,n) = (n,m)
while n != 0:
(m,n) = (n,m%n)
return m
def main():
seq = range(11,100)
ans_x = 1
ans_y = 1
for i in seq:
for j in seq[i+1:]:
for (x, y) in delete_same_number(i,j):
x, y = int(x), int(y)
if x == 0 or y == 0:
break
gcd1 = gcd(i,j)
gcd2 = gcd(x,y)
if (i//gcd1 == x//gcd2) and (j//gcd1 == y//gcd2):
if (i%10) == 0 or (j%10) == 0:
pass
else:
ans_x *= x//gcd2
ans_y *= y//gcd2
print ans_y//gcd(ans_x,ans_y)
def delete_same_number(i,j):
s1 = str(i)
s2 = str(j)
if s1[0] == s2[0]:
yield (s1[1], s2[1])
if s1[0] == s2[1]:
yield (s1[1], s2[0])
if s1[1] == s2[0]:
yield (s1[0], s2[1])
if s1[1] == s2[1]:
yield (s1[0], s2[0])
yield ('0','0')
main()
Recommended Posts