In Python3.8 und höher kann der inverse Mod mit der integrierten Funktion pow berechnet werden.

Überblick

Es ist eine inverse Restoperation, die häufig in der Wettbewerbsprogrammierung verwendet wird, aber es scheint, dass sie mit der in Python 3.8 oder höher integrierten Funktion pow berechnet werden kann.

Bisher war es erforderlich, eine eigene Funktion zu erstellen, um den Rest des inversen Elements anhand der im folgenden Artikel beschriebenen Methode zu ermitteln. Eine Besonderheit, wie man "zu viel geteilt durch 1000000007" findet! ~ Vom inversen Element zum diskreten Logarithmus ~ (Qiita)

Zum Beispiel in Python 3.8 oder höher

38^{-1}\,\,mod\,\,97

Wenn Sie berechnen möchten

pow(38, -1, 97)

Sie können mit berechnen.

Überprüfen Sie die offizielle Dokumentation

Python3.7 Integrierte Funktionen-pow (x, y [, z])

pow(x, y[, z]) Gibt die y-te Potenz von x zurück. Wenn z existiert, wird der Rest von z für die y-te Potenz von x zurückgegeben ~ Ausgelassen ~ Wenn es> z gibt, müssen x und y vom ganzzahligen Typ sein und y darf nicht negativ sein.

Python3.8 Eingebaute Funktionen-pow (base, exp [, mod])

pow(base, exp[, mod]) Gibt die Expth-Potenz der Basis zurück. Wenn es einen Mod gibt, wird der Rest des Mods für die Expth-Potenz der Basis zurückgegeben ~ Ausgelassen ~ For int operands base and exp, if mod is present, mod must also be of integer type and mod must be nonzero. If mod is present and exp is negative, base must be relatively prime to mod. In that case, pow(inv_base, -exp, mod) is returned, where inv_base is an inverse to base modulo mod.

Die 3.7-Dokumentation besagt, dass das Argument "pow (x, y, z)" y "(" exp ") nicht negativ sein darf, wenn es ein Argument" z "(" mod ") gibt. Diese Beschreibung wurde in der 3.8-Dokumentation entfernt. Die 3.8-Dokumentation besagt, dass, wenn das Argument "pow (base, exp, mod)" exp "eine negative Zahl ist, die" base "und" mod "zueinander prim sein müssen und das Argument" exp " Ermöglicht negative Zahlen auch mit mod`.

Ich werde es tatsächlich überprüfen.

keigo0205@MacBook-Pro ~ % python --version
Python 3.8.2
keigo0205@MacBook-Pro ~ % python
Python 3.8.2 (default, Mar 24 2020, 11:35:26) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> pow(38, -1, 97)
23
>>> 23 * 38 % 97 == 1
True
>>> exit()
keigo0205@MacBook-Pro ~ % python --version
Python 3.7.7
keigo0205@MacBook-Pro ~ % python
Python 3.7.7 (default, Mar 24 2020, 13:42:02) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> pow(38, -1, 97)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: pow() 2nd argument cannot be negative when 3rd argument specified
>>> exit()

Korrekt···

Versuchen Sie, das Problem der Verwendung des Reverse Mod mit AtCoder zu lösen.

Lösen wir ABC159-D --Bouquet. AtCoders Python ist Version 3.8.2.

Problemzusammenfassung Angesichts der natürlichen Zahlen "n" und der verschiedenen natürlichen Zahlen "a" und "b" darunter. Finden Sie die Antwort der folgenden Formel geteilt durch "10 ** 9 + 7". Beachten Sie jedoch, dass "a" und "b" kleiner oder gleich "2 * 10 ** 5" sind.


2^n - 1 - nCa - nCb

Antwortbeispiel

n, a, b = list(map(int, input().split()))
MOD = 10**9 + 7

# 1!Ab max(a, b)!Das umgekehrte Element bis wird durch MOD geteilt
#n bis n-max(a*b)Teilen Sie durch MOD, um den Rest zu finden.
fact = {}
fact[n] = n
fact[n - 1] = fact[n] * (n - 1) % MOD

inv_fact = [0] * (max(a, b) + 1)
inv_fact[1] = 1

for i in range(2, max(a, b) + 1):
    fact[n - i] = fact[n - i + 1] * (n - i) % MOD
    inv_fact[i] = inv_fact[i - 1] * pow(i, -1, MOD) % MOD

subtrahend = 1 + fact[n - a + 1] * inv_fact[a] + fact[n - b + 1] * inv_fact[b]
minuend = pow(2, n, MOD)

print((minuend + 2 * MOD - subtrahend) % MOD)

Zusammenfassung

Ich habe es eingeführt, weil die Funktion der integrierten Funktion in Python 3.8 erweitert wurde. Sie sollten die offizielle Dokumentation regelmäßig lesen.

Persönlich bin ich froh, einfach den Reverse Mod schreiben zu können, ohne meine eigene Funktion mitbringen zu müssen.

Recommended Posts

In Python3.8 und höher kann der inverse Mod mit der integrierten Funktion pow berechnet werden.
Ich habe die Jumbo-Lotterie zum Jahresende mit Python gekauft und analysiert, die in Colaboratory ausgeführt werden kann
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
Um Japanisch mit Python in der Docker-Umgebung verwenden zu können
[C / C ++] Übergeben Sie den in C / C ++ berechneten Wert an eine Python-Funktion, um den Prozess auszuführen, und verwenden Sie diesen Wert in C / C ++.
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
[Python3] Speichern Sie die Mittelwert- und Kovarianzmatrix in json mit Pandas
Funktionssynthese und Anwendung in Python
Füllen Sie die Zeichenfolge mit Nullen in Python und zählen Sie bestimmte Zeichen aus der Zeichenfolge
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Zeigen Sie Python 3 im Browser mit MAMP an
Umgang mit "Jahren und Monaten" in Python
Suchen und überprüfen Sie die inverse Matrix in Python
Artikel, der eine Person sein kann, die den Mechanismus der API versteht und beherrscht (mit Python-Code)
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Holen Sie sich den Aufrufer einer Funktion in Python
[Automatisierung] Extrahieren Sie die Tabelle als PDF mit Python
Über den Unterschied zwischen "==" und "is" in Python
[Python] Ich habe eine Praxis untersucht, die durch asynchrone Verarbeitung (Multiprocessing, Asyncio) parallel zum Hauptthread ausgeführt werden kann.
Ich habe Funktionssynthese und Curry mit Python versucht
Lösen des Lorenz 96-Modells mit Julia und Python
Archivieren und komprimieren Sie das gesamte Verzeichnis mit Python
Einheitsmatrix und inverse Matrix: Lineare Algebra in Python <4>
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Automatisieren Sie das Entfernen des Hintergrunds für die neuesten Porträts in einem Verzeichnis mit Python und API
Überlegen Sie, wann Sie mit Python3 und Scala3 in 10 Jahren gute Arbeit leisten können.
Visualisierung von geografischen Informationen von R und Python, die von Power BI ausgedrückt werden können
Richten Sie einen FTP-Server ein, der sofort erstellt und zerstört werden kann (in Python).
Morphologische Analyse und tfidf (mit Testcode), die in ca. 1 Minute durchgeführt werden können
Bis Sie Blender installieren und vorerst mit Python ausführen können
[Python] Erläutert anhand eines Beispiels den Unterschied zwischen strftime und strptime im datetime-Modul
Die Geschichte, dass sendmail, die im Terminal ausgeführt werden kann, mit cron nicht funktioniert hat
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
Das einfachste Python-Memo in Japan (Klassen und Objekte)
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
Crawlen Sie die im Twitter-Tweet enthaltene URL mit Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Mit Python psycopg2 erhalten Sie Ergebnisse im Diktatformat
Schreiben Sie mit OpenCV-Python Zeichen in die Kartenillustration
Berechnen Sie Pose- und Transformationsunterschiede in Python mit ROS
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Finden Sie die Hermite-Matrix und ihre eindeutigen Werte in Python
Installieren Sie die neueste stabile Version von Python mit pyenv (sowohl 2 als auch 3).
Das von Python berechnete VIF und das von Excel berechnete VIF sind unterschiedlich.
Nichtlineare simultane Gleichungen können mit Python leicht gelöst werden.
[Redash] Die Standardbibliothek kann nicht in der Python-Funktion verwendet werden