[PYTHON] So etwas wie 40-32 / 2 = 4!

Ich glaube, ich habe es vor ungefähr 10 Jahren gesehen ...

image.png

Lassen Sie uns dies als Thema untersuchen.

Round-Robin

Zuallererst ist es ein Round-Robin mit Hirntod. Die folgende Schleife wird gebildet.

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))

Ausgabe.

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!
...

Wenn $ c = 1 $ ist, haben sowohl $ a-b / c $ als auch $ (a-b) / c $ den gleichen Wert. Wenn $ d = 1,2 $ ist, dann ist $ d! = D $, sodass Sie sehen können, dass es das Thema für jedes $ a, b = a-1 oder a-2 $ erfüllt. …… Aber das ist nicht die Absicht dieses Tonchi.

Round-Robin 2

Machen Sie die Bedingungen etwas strenger. Respektieren Sie das Thema und machen Sie es zu $ 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))

Ausgabe.

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!
...

Es wird mehr wie Tonchi. Wahrscheinlich endlos, aber nicht bewiesen. Auf den ersten Blick frage ich mich, ob es Fälle gibt, in denen ** $ 3! $ Die Antwort ist **. Da der Rechenaufwand gestiegen ist, möchte ich auch einen Algorithmus, der $ a, b, c, d $ in kürzerer Zeit generiert.

Mathematische Überlegung

a-b/c = d!

Dies kann eine Matrix wie diese sein:

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

Ich werde es lösen.

\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}

Von diesen ist die Bedingung des Subjekts eine Kombination von $ c und d $, so dass $ a und b $ ganze Zahlen sind.

Wenn d = 3

Betrachten Sie den Fall von $ d = 3 . Zu diesem Zeitpunkt lautet die Bedingung $ a = \ frac {3c} {c-1} $ $ b = \ frac {3c} {c-1} (2! -C) $, aber $ c \ Aus geq 2 $ können wir erkennen, dass $ b $ keine positive ganze Zahl sein kann. Daher ist es unwahrscheinlich, dass $ d = 3 $ das Thema erfüllt.

Einfache allgemeine Lösung

Wenn Sie möchten, dass $ \ frac {cd} {c-1} $ eine Ganzzahl für ein $ d $ ist, wissen Sie, dass mindestens $ c = d + 1 $ diese ausfüllt. Wenn Sie also c korrigieren, lautet die Bedingung $ a = (d + 1) \ Bigl \\ {(d-1)! -1 \ Bigr \\} $ $ b = (d + 1) \ Bigl \\ {(d-1)! - D-1 \ Bigr \\} $.

Da d jede ganze Zahl größer oder gleich 4 annehmen kann, haben wir gezeigt, dass es unzählige $ a, b, c, d $ gibt, die das Subjekt erfüllen.

Lassen Sie sie uns übrigens programmatisch auflisten.

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))

Ausgabe

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!
...

Der Berechnungsbetrag hat sich ebenfalls von $ O (n ^ 3) $ zu $ O (n) $ geändert und kann mit hoher Geschwindigkeit generiert werden. Ich bin glücklich.

Einfache allgemeine Lösung 2

In ähnlicher Weise ist $ \ frac {cd} {c-1} $ für $ c = 2 $ immer eine ganze Zahl. $ 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!
...

Allgemeinere Lösung unbekannt

Für ein $ d $ hat $ c $ eine Untergrenze von 2 und eine Obergrenze von $ (d-1)! -1 $. (Wenn $ c = (d-1)! $, $ B = 0 $, kurz bevor c erhöht werden kann. Tatsächlich ist $ b = 0 $ ungeeignet, also $ (d-1) -1 Sie können bis zu $) nachschlagen

Von diesen gibt $ c = 2 oder d + 1 $ ganze Zahlen $ a, b $ für jedes $ d $ zurück, so dass es mit hoher Geschwindigkeit berechnet werden kann. Es kann jedoch nicht gesagt werden, dass andere Zahlen definitiv ganze Zahlen sein werden, so dass diese Verallgemeinerung wahrscheinlich weitere Überlegungen erfordert.

Recommended Posts

So etwas wie 40-32 / 2 = 4!
So etwas wie JS setTimeout in Python
So etwas wie tail -f in Python
Machst du so etwas wie eine Rakete?
Führen Sie so etwas wie Redis-Transaktionen in Python aus
Versuchen Sie etwas wie Python für-else in Ruby
Versuchen Sie etwas wie C # LINQ zu machen
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Linux ist in erster Linie so etwas
Zeichnen Sie gewaltsam so etwas wie ein Flussdiagramm mit Python, matplotlib