[PYTHON] Über den ungefähren Bruchteil des Umfangsverhältnisses

Pi

Pi. Es ist eine große Zahl voller Charme und Geheimnisse, die nur eine Konstante, aber nicht nur eine Konstante ist. Es ist nicht leicht zu beweisen, aber ist es nicht die bekannteste irrationale und transzendentale Zahl?

Umfangswert

Es gibt eine Geschichte, die auf verschiedene Weise gesucht wurde. Da es nichts mit diesem Artikel zu tun hat, werde ich die spezifische Methode nicht erläutern, aber selbst bei einem normalen Notebook-PC können Sie, wenn es sich um eine moderne Spezifikation handelt, leicht etwa 100 Stellen (in Sekunden) finden. Die Theorie, warum es erforderlich ist, ist normalerweise schwierig, aber es ist einfach, wenn die Berechnungsmethode akzeptiert wird. Ich werde den Wert vorerst erwähnen π = 3.141592653589 793238462643 383279502884 197169399375 105820974944 592307816406 286208998628 034825342117 067982148086 513282306647 ... und so weiter.

Ungefährer Bruchteil des Umfangs

Was ist der ungefähre Anteil dieses Themas? Es ist eine Geschichte. Wenn Sie es streng machen wollen, müssen Sie über die Dichte der reellen Zahlen (rationale und irrationale Zahlen) nachdenken, die Sie in Universitätsmathematik studieren, aber Sie können es einfach intuitiv erklären.

Erstens ist das Umfangsverhältnis eine unangemessene Zahl. Ich gebe das auch zu. Ich weiß nicht, ob es völlig zufällig ist. Die Zahl in der n-ten Ziffer soll zufällig sein. Auf der anderen Seite, für rationale Zahlen, wo kommt die Schleife immer heraus? 1 ÷ 6 = 0,666 ... und 6 Schleifen kommen heraus und 123 ÷ 999 = 0,123123123 ... und 123 Schleifen kommen heraus. Sie können 6 ÷ 2 auch als 6 ÷ 2 = 3 = 2.999 ... schreiben. Selbst wenn es teilbar ist, wird eine Schleife angezeigt. Das Vorhandensein oder Fehlen von Schleifen ist einer der Hauptunterschiede zwischen rationalen und irrationalen Zahlen. Auf diese Weise ist es eine völlig andere Zahl als die rationale Zahl und die irrationale Zahl, aber es ist möglich, eine rationale Zahl zu erzeugen, die der rationalen Zahl, die als Umfangsverhältnis bezeichnet wird, so nahe wie möglich kommt. Ich sage manchmal "dicht" in schwierigen Worten, aber um es grob zu erklären, die rationale Zahlenfolge An

A_1=3, \quad A_2=3.1, \quad A_3=3.14,\quad ...

Wenn Sie sich entscheiden, stimmt die Grenze dieser Zahlenfolge mit dem Umfangsverhältnis überein. Es erscheint für einen Moment seltsam, wenn gesagt wird, dass die Grenze mit einer unvernünftigen Zahl identisch ist, obwohl nur rationale Zahlen erscheinen, aber intuitiv überzeugend ist. Ich frage mich, ob.

Schließlich können Sie Brüche erstellen, die dem Umfangsverhältnis so nahe kommen, wie Sie möchten.

Interessante Fakten

Betrachten wir hier das folgende Problem

\text{einstellen$F_n$Ist wie folgt definiert.}\\
F_n:=\{a/b\mid b\neq 0,\quad 0 \leq a,b \leq 10^n-1,\quad a,b\in \mathbb{Z} \}

Und. In diesem Moment,

F_n\text{Die meisten unter}\pi\text{Was ist in der Nähe?}

Mit anderen Worten

F_1\text{Ist eine Reihe von Zahlen, die von 1 ÷ 1 bis 9 ÷ 9 gemacht werden können}
F_2\text{Ist ein Satz, der von 1 ÷ 1 bis 99 ÷ 99 gemacht werden kann.}

Was ist also der dem Umfangsverhältnis am nächsten liegende Bruchteil, der die Anzahl der Stellen im Nennermolekül begrenzt? Nennen wir es p (n).

Und die folgenden Fakten sind bekannt.

\begin{align*}
p(1)&=3/1\\
p(2)&=22/7\\
p(3)&=355/113\\
p(4)&=355/113=p(3)
\end{align*}

Mit anderen Worten, 355/113 ist eine äußerst genaue Annäherung !! Dies ist persönlich eine sehr interessante Tatsache, da Sie im Nenner bis zu 4 Stellen verwenden können, aber 3 Stellen ÷ 3 Stellen sind ein genauer Bruch. Wenn ich dies jedoch als Tatsache wusste, fragte ich mich: „Wirklich?“ Dann kommt das Programm ins Spiel. Lassen Sie uns eine Round-Robin-Suche mit dem Programm durchführen.

Überlegung vor dem Erstellen eines Programms

Dieses Mal werden wir bis zu 4 Stellen / 4 Stellen prüfen, sodass der Rechenaufwand pro Runde etwa 10000 * 10000 = 10 ^ 8 beträgt Wenn dies der Fall ist, können Sie dies per Round-Robin überprüfen. Möglicherweise möchten Sie jedoch in Zukunft nach p (8) fragen. Lassen Sie uns daher einen Weg finden, um einige Berechnungen wegzulassen.

Einfallsreichtum 1: Beginnen Sie mit der Suche nach Molekülen aus dem Nenner * 3 Einfallsreichtum 2. Fügen Sie eine Aktion ein, um in der Mitte anzuhalten Ich denke, dass dies allein den Rechenaufwand erheblich reduzieren wird, also werde ich es damit umsetzen!

Programm

Da die Fähigkeiten des Programms überwiegend unzureichend sind, werde ich es ehrlich schreiben.

pi=3.141592653589793#Ich frage mich, ob das genug ist

n=int(input())
check=((10**n)-1)//3
ans=100
ans_list=[100,1]
for i in range(1,check+1):#Dies ist der Nenner
    for j in range(3*i,(10**n)):
        frac=j/i
        if abs(frac-pi)<abs(pi-ans):
            ans=frac
            ans_list=[j,i]
        else:
            if frac>ans:
                break
print(ans)
print(ans_list)

Ausführungsergebnis

1
>>>3.0
>>>[3, 1]

2
>>>3.142857142857143
>>>[22, 7]

3
>>>3.1415929203539825
>>>[355, 113]

4
>>>3.1415929203539825
>>>[355, 113]

5
>>>3.1415926415926414
>>>[99733, 31746]

Selbst mit 4 Stellen ÷ 4 Stellen ist 355/113 wirklich die stärkste.

Verspielte Zusammenfassung

355/113 ist eine großartige Nummer. Mein iPhone-Passwort war übrigens vor langer Zeit 355113.

Ernsthafte Zusammenfassung

Es ist ziemlich langsam um n = 5, also würde ich es begrüßen, wenn jemand es verbessern könnte.

Nachtrag

Es gibt math.pi in math. Dann denke ich, dass das in Ordnung ist.

import time
import math

n=int(input())
start=time.time()
pi=math.pi
check=((10**n)-1)//3
ans=100
ans_list=[100,1]

for i in range(1,check+1):#Dies ist der Nenner
    for j in range(int((pi)*i),(10**n)):
        frac=j/i
        if abs(frac-pi)<abs(pi-ans):
            ans=frac
            ans_list=[j,i]
        else:
            if frac>ans:
                break
print(ans)
print(ans_list)
end=time.time()
print(end-start)

Es wurde so schnell, dass ich nach p (8) fragte.

6
>>>3.141592653581078
>>>[833719, 265381]

7
>>>3.1415926535898153
>>>[5419351, 1725033]

8
>>>3.1415926535897927
>>>[80143857, 25510582]

Ich habe das Gefühl, dass das langjährige Rätsel gelöst ist.

Recommended Posts

Über den ungefähren Bruchteil des Umfangsverhältnisses
Über den ungefähren Bruchteil des Umfangsverhältnisses
Über alles von numpy
Über die Zuweisung von numpy.ndarray
Über Variable von Chainer
Anzeige von Brüchen (Liste)
Über max_iter von LogisticRegression () von scikit-learn
Über die japanische Unterstützung von Cometchat
Über verschiedene Codierungen von Python 3
Über alle von numpy (2.)
Über die Kostenberechnung von MeCab
Über die Komponenten von Luigi
Über die HOG-Ausgabe von Scikit-Image
Über die Funktionen von Python
Über die Datenverwaltung von Amboss-App-Server
Über den Rückgabewert von pthread_mutex_init ()
Über den Rückgabewert des Histogramms.
Über den Grundtyp von Go
Über die Obergrenze von Threads-max
Über die zirkuläre Überkreuzung genetischer Algorithmen
Über das Verhalten von Yield_per von SqlAlchemy
Informationen zum Importfehler von PyQt5.QtWidgets (Anaconda)
Über die Größe der Punkte in Matplotlib
Über die Farbhalbtonverarbeitung von Bildern
Informationen zur Grundlagenliste der Python-Grundlagen