[PYTHON] Quelque chose comme 40-32 / 2 = 4!

Je pense que je l'ai vu il y a environ 10 ans ...

image.png

Examinons ceci comme sujet.

Tournoi à la ronde

Tout d'abord, c'est un round-robin avec la mort cérébrale. La boucle suivante sera formée.

from math import factorial

for a in range(1,100):
    for b in range(1,a):
        for c in range(1,100):
            if (a-b)%c != 0:
                continue
            d = int((a-b)/c)
            if a - b/c == factorial(d):
                print("{}-{}/{}={}!".format(a,b,c,d))

production.

2-1/1=1!
3-1/1=2!
3-2/1=1!
4-2/1=2!
4-3/1=1!
5-3/1=2!
5-4/1=1!
...

Lorsque $ c = 1 $, $ a-b / c $ et $ (a-b) / c $ ont la même valeur. De plus, quand $ d = 1,2 $, alors $ d! = D $, donc vous pouvez voir qu'il rencontre le sujet pour tout $ a, b = a-1 ou a-2 $. …… Mais ce n'est pas l'intention de ce Tonchi.

Tournoi à la ronde 2

Rendez les conditions un peu plus strictes. Respectez le sujet et faites-le $ c \ geq 2, d \ geq 3 $.

from math import factorial

for a in range(1,1000):
    for b in range(1,a):
        for c in range(2,1000):
            if (a-b)%c != 0:
                continue
            d = int((a-b)/c)
            if d <= 2:
                continue
            if a - b/c == factorial(d):
                print("{}-{}/{}={}!".format(a,b,c,d))

production.

25-5/5=4!
30-18/3=4!
40-32/2=4!
138-108/6=5!
230-220/2=5!
721-103/103=6!
728-416/52=6!
...

Cela ressemble plus à Tonchi. Probablement sans fin, mais pas prouvé. À première vue, je me demande s'il existe des cas où ** $ 3! $ Est la réponse **. De plus, étant donné que la quantité de calcul a augmenté, j'aimerais un algorithme qui génère $ a, b, c, d $ dans un temps plus court.

Considération mathématique

a-b/c = d!

Cela peut être une matrice comme celle-ci:

\begin{pmatrix}
c & -1 \\
1 & -1
\end{pmatrix}
\times
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
c
\begin{pmatrix}
d! \\
d
\end{pmatrix}

Je vais le résoudre.

\begin{pmatrix}
a \\
b
\end{pmatrix}
=
c
\begin{pmatrix}
c & -1 \\
1 & -1
\end{pmatrix}^{-1}
\times
\begin{pmatrix}
d! \\
d
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
c
\cdot
\frac{1}{-c+1}
\begin{pmatrix}
-1 & 1 \\
-1 & c
\end{pmatrix}
\times
\begin{pmatrix}
d! \\
d
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
\frac{c}{1-c}
\begin{pmatrix}
-d! + d \\
-d! + cd
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
\frac{c}{c-1}
\begin{pmatrix}
d!-d \\
d!-cd
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
\frac{cd}{c-1}
\begin{pmatrix}
(d-1)!-1 \\
(d-1)!-c
\end{pmatrix}

Parmi ceux-ci, la condition du sujet est une combinaison de $ c et d $ telle que $ a et b $ sont des entiers.

Lorsque d = 3

Prenons le cas de $ d = 3 . À ce stade, la condition est $ a = \ frac {3c} {c-1} $ $ b = \ frac {3c} {c-1} (2! -C) $, mais $ c \ A partir de geq 2 $, nous pouvons voir que $ b $ ne peut pas être un entier positif. Par conséquent, $ d = 3 $ est peu susceptible de satisfaire le sujet.

Solution générale simple

Quand vous voulez que $ \ frac {cd} {c-1} $ soit un entier pour un $ d $, vous savez qu'au moins $ c = d + 1 $ le remplit. Donc, si vous corrigez c, la condition est $ a = (d + 1) \ Bigl \\ {(d-1)! -1 \ Bigr \\} $ $ b = (d + 1) \ Bigl Ce sera \\ {(d-1)! - D-1 \ Bigr \\} $.

Puisque d peut prendre n'importe quel entier supérieur ou égal à 4, nous avons montré qu'il existe d'innombrables $ a, b, c, d $ qui satisfont le sujet.

Au fait, énumérons-le par programme.

from math import factorial

for d in range(4,100):
    c = d+1
    a = c*(factorial(d-1)-1)
    b = c*(factorial(d-1)-c)
    print("{}-{}/{}={}!".format(a,b,c,d))

production

25-5/5=4!
138-108/6=5!
833-791/7=6!
5752-5696/8=7!
45351-45279/9=8!
403190-403100/10=9!
3991669-3991559/11=10!
43545588-43545456/12=11!
518918387-518918231/13=12!
6706022386-6706022204/14=13!
93405311985-93405311775/15=14!
1394852659184-1394852658944/16=15!
22230464255983-22230464255711/17=16!
376610217983982-376610217983676/18=17!
6758061133823981-6758061133823639/19=18!
128047474114559980-128047474114559600/20=19!
2554547108585471979-2554547108585471559/21=20!
...

Le montant du calcul est également passé de $ O (n ^ 3) $ à $ O (n) $, et il peut être généré à grande vitesse. Je suis heureux.

Solution générale simple 2

De même pour $ c = 2 $, $ \ frac {cd} {c-1} $ est toujours un entier. $ a = 2d \ Bigl \\ {(d-1)! -1 \ Bigr \\} $ $ b = 2d \ Bigl \\ {(d-1)! - 2 \ Bigr \\} $

40-32/2=4!
230-220/2=5!
1428-1416/2=6!
10066-10052/2=7!
80624-80608/2=8!
725742-725724/2=9!
7257580-7257560/2=10!
...

Solution plus générale inconnue

Pour un $ d $, $ c $ a une limite inférieure de 2 et une limite supérieure de $ (d-1)! -1 $. (Quand $ c = (d-1)! $, $ B = 0 $, ce qui est juste avant que c ne puisse être élevé. En fait, $ b = 0 $ ne convient pas, donc $ (d-1) -1 Vous pouvez rechercher jusqu'à $)

Parmi ceux-ci, $ c = 2 ou d + 1 $ renvoie des entiers $ a, b $ pour tout $ d $, afin qu'il puisse être calculé à grande vitesse. Cependant, on ne peut pas dire que d'autres nombres seront certainement des entiers, de sorte que cette généralisation nécessitera probablement un examen plus approfondi.

Recommended Posts

Quelque chose comme 40-32 / 2 = 4!
Quelque chose comme JS setTimeout en python
Quelque chose comme tail -f en Python
Fabriquez-vous quelque chose comme une fusée?
Faites quelque chose comme les transactions Redis en Python
Essayez quelque chose comme Python for-else dans Ruby
Essayez de créer quelque chose comme C # LINQ
# J'ai essayé quelque chose comme Vlookup avec Python # 2
Linux est quelque chose comme ça en premier lieu
Dessinez de force quelque chose comme un organigramme avec Python, matplotlib