Dans Python3.8 et versions ultérieures, le mod inverse peut être calculé avec la fonction intégrée pow.

Aperçu

C'est une opération de reste inverse qui est souvent utilisée dans la programmation de compétition, mais il semble qu'elle puisse être calculée à l'aide de la fonction intégrée pow dans Python 3.8 ou version ultérieure.

Jusqu'à présent, il fallait créer sa propre fonction pour trouver le reste de l'élément inverse en se référant à la méthode décrite dans l'article suivant. Une fonction spéciale sur la façon de trouver "trop divisé par 1000000007"! ~ De l'élément inverse au logarithme discret ~ (Qiita)

Par exemple en Python 3.8 ou version ultérieure

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

Quand tu veux calculer

pow(38, -1, 97)

Vous pourrez calculer avec.

Consultez la documentation officielle

Python3.7 Fonctions intégrées-pow (x, y [, z])

pow(x, y[, z]) Renvoie la puissance y-ième de x; si z existe, renvoie le reste de z pour la puissance y-ième de x ~ Omis ~ S'il y a> z, x et y doivent être de type entier et y doit être non négatif.

Python3.8 Fonctions intégrées-pow (base, exp [, mod])

pow(base, exp[, mod]) Renvoie la puissance étendue de la base; s'il y a un mod, renvoie le reste du mod pour la puissance étendue de la base ~ Omis ~ 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.

La documentation 3.7 indique que `` l'argument pow (x, y, z) y (ʻexp) doit être non négatif s'il y a un argument z ( mod). , Cette description a été supprimée dans la documentation 3.8. La documentation 3.8 indique que lorsque l'argument pow (base, exp, mod) exp est un nombre négatif, base et mod doivent être premiers l'un par rapport à l'autre, et l'argument ʻexp ʻAutorise les nombres négatifs même avec mod.

Je vais vraiment le vérifier.

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

C'est vrai···

Essayez de résoudre le problème de l'utilisation du mod inversé avec AtCoder.

Résolvons ABC159-D --Bouquet. Le Python d'AtCoder est la version 3.8.2.

Résumé du problème Étant donné les nombres naturels «n» et les différents nombres naturels «a» et «b» en dessous. Trouvez la réponse de la formule suivante divisée par «10 ** 9 + 7». Cependant, notez que «a» et «b» sont inférieurs ou égaux à «2 * 10 ** 5».


2^n - 1 - nCa - nCb

Exemple de réponse

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

# 1!À partir de max(a, b)!L'élément inverse jusqu'à est divisé par MOD
#n à n-max(a*b)Divisez par MOD pour trouver le reste.
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)

Résumé

Je l'ai introduit car la fonction de la fonction intégrée a été étendue dans Python 3.8. Vous devriez lire régulièrement la documentation officielle.

Personnellement, je suis heureux de pouvoir écrire simplement le mod inversé sans avoir à apporter ma propre fonction.

Recommended Posts

Dans Python3.8 et versions ultérieures, le mod inverse peut être calculé avec la fonction intégrée pow.
J'ai acheté et analysé la loterie jumbo de fin d'année avec Python qui peut être exécutée dans Colaboratory
J'ai essayé d'implémenter la fonction gamma inverse en python
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
[Python3] Enregistrez la matrice de moyenne et de covariance dans json avec les pandas
Synthèse de fonctions et application en Python
Remplissez la chaîne avec des zéros en python et comptez certains caractères de la chaîne
Comment obtenir la différence de date et d'heure en secondes avec Python
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
Prenez la somme logique de List en Python (fonction zip)
Afficher Python 3 dans le navigateur avec MAMP
Gérer les "années et mois" en Python
Rechercher et vérifier la matrice inverse en Python
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
[Python] Récupérez les fichiers dans le dossier avec Python
Récupérer l'appelant d'une fonction en Python
[Automation] Extraire le tableau en PDF avec Python
À propos de la différence entre "==" et "is" en python
[Python] J'ai examiné une pratique qui peut être exécutée en parallèle avec le thread principal par traitement asynchrone (multiprocessing, asyncio)
J'ai essayé la synthèse de fonctions et le curry avec python
Résolution du modèle Lorenz 96 avec Julia et Python
Archivez et compressez tout le répertoire avec python
Matrice unitaire et matrice inverse: Algèbre linéaire en Python <4>
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Visualisation des informations géographiques de R et Python qui peuvent être exprimées par Power BI
Mettre en place un serveur FTP qui peut être créé et détruit immédiatement (en Python)
Analyse morphologique et tfidf (avec code de test) pouvant être effectuée en 1 minute environ
Jusqu'à ce que vous puissiez installer Blender et l'exécuter avec python pour le moment
[Python] Explique la différence entre strftime et strptime dans le module datetime avec un exemple
L'histoire selon laquelle sendmail qui peut être exécuté dans le terminal ne fonctionnait pas avec cron
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
Le mémo Python le plus simple au Japon (classes et objets)
[Introduction à Python] Comment itérer avec la fonction range?
[Python] Obtenez les nombres dans l'image graphique avec OCR
Comprenez attentivement la distribution exponentielle et dessinez en Python
Visualisez la gamme d'insertions internes et externes avec python
Notes sur les connaissances Python utilisables avec AtCoder
Tracer et comprendre la distribution normale multivariée en Python
Explorez l'URL contenue dans le tweet Twitter avec python
Convertissez l'image au format .zip en PDF avec Python
Obtenez des résultats au format dict avec Python psycopg2
Ecrire des caractères dans l'illustration de la carte avec OpenCV python
Calculer la différence entre Pose et Transform avec ROS en Python
Comprendre attentivement la distribution de Poisson et dessiner en Python
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Trouvez la matrice Hermite et ses valeurs uniques en Python
Installez la dernière version stable de Python avec pyenv (à la fois 2 et 3)
Le VIF calculé par Python et le VIF calculé par Excel sont différents .. ??
Les équations simultanées non linéaires peuvent être facilement résolues avec Python.
[Redash] La bibliothèque standard ne peut pas être utilisée dans la fonction python