49/98 est une fraction intéressante. Un mathématicien inexpérimenté pense à tort: «Si vous supprimez 9 de chacune de la molécule et du dénominateur, vous obtenez 49/98 = 4/8, qui peut être une forme simple. C'est peut-être le cas (la méthode n'est pas correcte, mais dans le cas du 49/98, il se trouve que c'est la bonne réduction.)
Nous supposons que les types comme 30/50 = 3/5 sont des exemples explicites.
Parmi ces fractions, quatre sont inférieures à un et ne sont pas évidentes, la molécule et le dénominateur étant des nombres à deux chiffres.
Répondez à la valeur du dénominateur lorsque le produit des quatre fractions est donné sous forme réduite. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2033
Les valeurs des deux fractions a1 / b1 et a2 / b2 sont les mêmes → a1//gcd(a1, b1) == a2//gcd(a2,b2) and b1//gcd(a1, b1) == b2//gcd(a2,b2) Minutes approximatives de fractions a / b → (a//gcd(a,b)) / (b//gcd(a,b))
Il a été codé de manière appropriée en fonction des faits ci-dessus. Je veux le réparer bientôt (= je ne le ferai pas)
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