Bases de calcul Théorie des nombres
Robert Campbell
introduction
arithmétique modulaire
arithmétique modulaire utilisant des nombres entiers modulo arithmétique certains N. entier fixe Ainsi, quelques exemples d'opérations modulo 12 sont les suivants:- 7 + 7 = 14 = 2 (mod 12)
- 5 * 7 = 35 = 11 (mod 12)
- 11/5 = 7 (mod 12) 5 * 7 = 11 (mod 12)
- 5 (-1) = 1/5 = 17 (mod 21) 5 * 17 = 85 = 1 (mod 21)
- 48/31 = 72 (mod 91) sous la forme 31 * 72 = 48 (mod 91)
- 9/3 = 7 (mod 12) 3 * 7 = 21 = 9 (mod 12)
Comme le dernier exemple souligne, la division modulaire ne produit pas toujours un résultat unique, pour d'autres réponses sont 3 et 11 (3 * 3 = 9 (mod 12) et 3 * 11 = 33 = 9 (mod 12)). En particulier, si le module et la part d'un facteur commun diviseur (dans ce cas 3 divise les deux 3 et 12), la réponse ne sera pas unique si elle existe. Nous tirons deux conclusions de ce - la première est que nous aimerions être en mesure de repérer les facteurs communs, et le second est que nous voudrions éviter de telles situations. En général, nous évitons la situation toujours apparaître en utilisant uniquement les premiers modules. Spotting la situation est l'un des résultats de la section suivante.
GCD - L'algorithme d'Euclide
Le plus grand nombre qui divise deux nombres n et m est appelé le plus grand commun diviseur de n et m. et pgcd notée (n. m).
L'algorithme pour trouver GCD (n m.) Fonctionne quelque chose comme ceci:- Notez n et m
- Réduire le plus grand modulo le plus petit
- Répétez l'étape 2 jusqu'à ce que le résultat est égal à zéro
- Publier le résultat précédent en tant que pgcd (n. M)
Un exemple de cet algorithme est le calcul suivant de GCD (120222):
Le programme court suivant vous permettra de calculer des exemples de l'algorithme d'Euclide:
Si vous pensez bien à l'algorithme d'Euclide, vous verrez que, à chaque étape les deux nombres sont formés en ajoutant des multiples des numéros originaux. Ainsi, il y a quelques chiffres, a et b. de telle sorte que pgcd (n. m) = a * n + b * m. L'algorithme d'Euclide étendu peut récupérer non seulement GCD (n. M), mais aussi ces nombres a et b.
L'algorithme d'Euclide étendu - Inverses modulaire
L'algorithme d'Euclide étendu calcule non seulement pgcd (m n.), Mais renvoie également le nombre a et b tels que pgcd (m n.) = A * n + b * m. Si pgcd (n. M) = 1 Cela résout le problème du calcul des inverses modulaires.
Supposons que l'on cherche à calculer n (-1) (mod m) et en outre supposer que pgcd (n. M) = 1. Exécutez l'algorithme d'Euclide étendu pour obtenir a et b de telle sorte qu'un n * + b * m = 1. Réorganiser ce résultat, nous voyons que * n = 1 b * m. ou * n = 1 (mod m). Cela résout le problème de trouver l'inverse modulaire de n. comme cela montre que n (-1) = a (mod m).
L'algorithme d'Euclide étendu est rien de plus que l'algorithme d'Euclide d'habitude, avec des calculs de côté pour assurer le suivi attentif de la combinaison des numéros originaux n et m ont été ajoutés à chaque étape. L'algorithme se déroule généralement comme ceci:
- Notez n. m. et les deux vecteurs (1,0) et (0,1)
- Diviser la plus grande des deux numéros par le plus petit - appeler ce quotient q
- Soustraire q fois la plus petite de la plus grande (par exemple de réduire la plus grande modulo le plus petit)
- Soustraire q fois le vecteur correspondant à la plus petite à partir du vecteur correspondant à la plus grande
- Répéter les étapes 2 à 4 jusqu'à ce que le résultat est zéro
- Publier le résultat précédent en tant que pgcd (n. M)
Un exemple de cet algorithme est le calcul suivant de 30 (-1) (mod 53):
De là, nous voyons que PGCD (30,53) = 1 et réarranger termes, on voit que 1 = -13 * 53 + 23 * 30. si nous concluons que 30 (-1) = 23 (mod 53). (Cela peut être confirmé en vérifiant que 23 * 30 = 1 (mod 53).)
Le programme court suivant vous permettra de calculer des exemples de l'Euclide étendu Algorithme:
Exponentiation - L'algorithme paysan russe
Lorsque le calcul d'une puissance d'un nombre avec un module fini, il existe des moyens efficaces de le faire et les moyens inefficaces de le faire. Dans cette section, nous présenterons une méthode efficace couramment utilisé qui a le nom curieux « l'algorithme paysan russe ».
Le moyen le plus évident pour calculer 12 10 (mod 23) est de multiplier 12 un total de neuf fois, ce qui réduit le résultat mod 23 à chaque étape. Une méthode plus efficace qui ne prend que quatre multiplications est accompli en premier notant que:
12 2 = 6 (mod 23)
12 4 = 6 2 = 13 (mod 23)
12 8 = 13 2 = 8 (mod 23)
Nous avons effectué trois quadrillages et, en notant que l'exposant se brise en puissances de 2 en 10 = 8 + 2, on peut réécrire notre calcul:
12 10 12 = (8 + 2)
= 12 * 8 12 2
= 8 * 6 = 2 (mod 23)
Ainsi, notre algorithme consiste à écrire l'exposant comme des puissances de deux. (Cela peut être fait en écrivant comme base du numéro 2 et la lecture de chiffres successifs -. Par exemple 1010 = 10102) Maintenant, on multiplie les places successives du nombre de base pour chaque chiffre de l'exposant qui est un « 1 ».
Le programme court suivant vous permettra de calculer des exemples de la méthode paysanne russe pour exponentiation:
peut être lu le (un peu cryptique) sortie de ce programme:- Les deux chiffres carte de l'exposant
- Les quadrillages successifs de la base (par exemple b b 2. 4. 8. b)
- Le produit des carrés appropriés
Nombres premiers
Un premier est un nombre qui n'a pas de diviseurs, autres que 1 et le nombre lui-même.
L'idée de nombres premiers soulève plusieurs questions - comment peut-on trouver un premier et comment pouvez-vous réduire un certain nombre dans un produit de facteurs premiers (c.-à-vous comment factoriser il)?
Le Eratosthène est de Sieve une méthode récente (datant du 3e siècle avant notre ère). L'idée est la suivante - écrire tous les entiers jusqu'à un certain point:
2 3 4 5 6 7 8 9 10 11 12 13 14 15.
Maintenant rayez tous ceux encore plus de 2:
2 3 4 5 6 7 8 9 10 11 12 13 14 15.
Maintenant rayez tous ceux divisible par 3 (autres que 3):
2 3 4 5 6 7 8910 11 12 13 1415.
A chaque étape, nous trouvons le prochain premier (nombre non barré) publie comme un nombre premier et tous ses multiples. Ainsi, dans cet exemple, nous voyons que les numéros 2, 3, 5, 7, 11 et 13 sont premiers.
Alors que le tamis est un moyen efficace de trouver un grand nombre de nombres premiers successifs, il ne peut pas être utilisé pour tester un nombre arbitraire de primalité. Cela peut être fait avec un test de pseudopremier.
D'autres exemples de ce test peuvent être calculées en utilisant la méthode précédemment mentionnée de exponentiation rapide:
Les commandes d'élément
Pourquoi le travail test de primalité? Le test de pseudopremier Fermat, ainsi qu'un certain nombre d'autres. dépend d'une simple propriété des nombres premiers Remarqué par Pierre Fermat au 17 e siècle:
Théorème: (petit théorème de Fermat) Si p est premier et 0< b < p then b ( p -1) =1(mod p ) .
Pour vanner les nombres premiers de non-nombres premiers, nous utilisons le fait que, pour un premier p cela est vrai pour toute base b. alors que pour un non-premier q et une base choisie b la valeur de b (q-1) (mod q) est arbitraire et rarement égal à 1.
Le plus petit exposant non nul e de telle sorte qu'un e = 1 (mod n) est de l'ordre d'un mod N. Ceci est généralement désigné o (a) (mod N).
Une conséquence du petit théorème de Fermat est que, pour le premier p et 0< a < p. the order of a mod p divides ( p -1).
La façon la plus simple de prendre en compte un nombre entier consiste à diviser l'essai par l'ensemble des nombres premiers inférieure à sa racine carrée. Pour un grand nombre c'est une méthode très inefficace, cependant. Un certain nombre de meilleures méthodes ont été développées au cours de la mi et la fin du 20e siècle, cependant. Nous allons décrire l'algorithme p-1 de Pollard.
Cette méthode fonctionne généralement si vous êtes prêt à courir assez à des valeurs assez grandes de l'exposant. Parfois, vous êtes chanceux, (p -1) n'a que des facteurs et factorisation est facile. Parfois, vous êtes malchanceux, (p -1) a un facteur premier et il faut beaucoup de travail à facteur N.
La structure de Zp
Éléments primitifs - Groupes cycliques
Un g de nombre est mod p primitive si l'ordre de g mod p est égal à (p-1).
Si p est premier, le petit théorème de Fermat que, pour tout g non divisible par p. g (p -1) = 1 (mod p). Si r est pas premier, disons r = pq. alors il n'y a pas d'éléments primitifs mod r. , Il est à l'inverse (assez) simple à prouver qu'il ya des éléments primitifs mod tout premier p.
Lorsque p est premier, il y a beaucoup d'éléments qui sont mod primitifs p. mais il n'y a aucun moyen de dire quels sont les éléments à court primitive de trouver leur ordre. Ainsi, la figure 2 est pas mod primitive 7 (2 1 = 2, 2 2 = 4 et 2 3 = 8 = 1 (mod 7), de sorte que l'ordre de 2 mod 7 est 3), mais la figure 3 est primitive mod 7 (3 1 = 3, 3 2 = 9 = 2, 3 3 = 27 = 6, 3 4 = 81 = 4, 3 5 = 243 = 5 si l'ordre de 3 mod 7 est de 6).
(À proprement parler, on n'a pas donné la définition correcte de la primitivité. Une définition plus correcte est que g est N mod primitif si les puissances successives de mod g N produisent tous les entiers inférieurs à N et coprime à N. Cette définition plus précise nous permet de état qu'il y a des éléments primitifs mod N si et seulement si N est de la forme p. p n. 2 p ou n. où p est un nombre premier).
Maintenant, pensez à un nombre qui n'est pas premier, dire N = pq. où p et q sont premiers. Examinons quelques-uns un qui est à la fois coprime p et q (autrement dit 0< a (mod p )< p. and similarly for q ). Thus from Fermat's Little Theorem we know that a ( p -1)( q -1) = ( a ( p -1) ) ( q -1) = 1 ( q -1) = 1 (mod p ) and similarly a ( p -1)( q -1) = 1 (mod q ). Thus a ( p -1)( q -1) = 1. The order of a mod pq must divide ( p -1)( q -1). In particular, as ( p -1)( q -1) < ( pq -1), we know that if N = pq is not prime, then no element has order N -1. We will use this to prove that a number is prime.
Entre autres, nous avons montré ce qui suit, qui est un sous-cas de ce qu'on appelle le théorème d'Euler. (L'un des nombreux théorèmes appelés « théorème d'Euler ».)
Théorème: Si N = pq. où p et q sont des nombres premiers, et si b est choisi tel que pgcd (n. N) = 1, alors b (p -1) (q-1) = 1 (mod N).
Miller-Rabin Primality test
prouver Primality
Ainsi, si nous pouvons trouver un élément tel qu'il a exactement l'ordre (N-1) mod N. puis nous avons prouvé que N est premier. Notre approche est la force brutale - nous essayons des valeurs successives d'un et voir si chacun est primitive. Les travaux ne sont pas aussi mauvais que cela puisse paraître, cependant. Pour tout un, nous demandons d'abord que (N-1) = 1 (mod N). Maintenant, nous savons que le véritable ordre d'un est un diviseur de N-1. Vérification d'un n pour chaque diviseur n de N -1 est pas mal. Il y a un deuxième tour, nous pouvons appliquer cependant. Si l'ordre d'un est strictement inférieur à N -1 alors il doit y avoir un certain diviseur premier p de N-1 tel que (N-1) / p = 1 (mod N). Ainsi, notre algorithme est:- Facteur (N -1) = p 1 e 1 p k e k. où chaque i p est premier
- Pour une séquence d'un « s (a = 2,3,4,5. Est probablement assez bon)
- Pour chaque i p. si un (N-1) / p = 1 (mod N), rejeter une
Parfois, plus facile à dire qu'à faire, en particulier la partie où vous facteur (N-1).
D'autres groupes et anneaux
La théorie des nombres est l'étude de plus que les entiers. Cela est vrai à la fois parce que d'autres structures algébriques sont des généralisations naturelles des nombres entiers et aussi parce qu'ils nous donnent souvent des informations sur les entiers.
La première généralisation des nombres entiers que nous aborderons est le gaussiennes, une Entiers extension des entiers par i. la racine carrée du négatif.
Les éléments des entiers gaussiens sont tous les nombres de la forme n + m i. où n et m sont des nombres entiers. L'addition et la multiplication sont faites de la manière habituelle.
champs de Galois (également appelés champs finis) sont des extensions des entiers modulo certains premier p.
Nous commençons par les entiers modulo p et certains polynôme qui ne peut être résolu (par exemple pris en compte) dans ce domaine. Continuons avec deux exemples concrets:
Exemple: GF (2 3) = Z2 [x] /< x 3 + x +1>
Notre exemple va commencer avec les entiers modulo 2 (ne contenant que les deux numéros 0 et 1). Conformément à la notation habituelle que nous appellerons cette F2. Compte tenu de ce domaine, nous retirons maintenant hors de notre chapeau polynôme x 3 + x + 1. Ni 0, ni 1 satisfait ce mod polynôme 2. Maintenant, faire semblant qu'il ya une solution ou d'une racine du polynôme, appelez un et ajouter ce symbole à notre champ d'origine. La chose que nous avons maintenant est appelé F2 [a]. Les éléments de cette chose ont la forme n + m a + k un 2. Notez qu'il n'y a pas d'éléments qui sont cubiques en tant que 3 peut être remplacé par - -1 comme était présumée être une racine du polynôme d'origine. En fait, nous travaillons modulo 2, donc +1 et -1 sont les mêmes, on peut remplacer un 3 par un +1. Énumération des 2 3 = 8 éléments dont nous disposons.
Exemple: GF (5 4) = Z5 [x] /< x 4 +2 x 3 +3 x 2 + x +1>
En commençant par l'hypothèse naïve que le polynôme définissant x 4 x 2 3 3 x 2 + x 1 est en effet mod irréductible 5 (et donc l'existence d'un champ fini), nous sommes en mesure de tenter informatique dans ce domaine :
Un peu plus intéressant est l'informatique des pouvoirs d'éléments. Tout comme dans le cas de l'informatique avec les entiers, on peut calculer efficacement en utilisant l'algorithme paysan russe de mise au carré et à multiplier.
Un exemple de cette multiplication efficace est le calcul d'un 26.- Comme 26 = 16 + 8 + 2, nous pouvons écrire dans la base 2, 26 = 110102
- Ainsi, un 26 = (a 16) (a 8) (a 2)
- L'informatique:
un 2. 2 = a 2
a 4. (a 2) 2 = 3 a 3 + 2 a 2 + 4 + 4 a
un 8. (a 4) 2 = (3 a 3 + 2 a 2 + 4 + 4 a) 2 = 3 a 3 + 3
un 16 (a 8) 2 = (3 a 3 + 3) = 2 2 a 2 + 4 bis - Ainsi, un 26 = (a 16) (a 8) (a 2) = (2 a 2 + 4 a) (3 a 3 + 3) (a 2) = 3 a 3 + a + 2 4
- Comme 26 = 110102 on peut écrire 26 = 0 + 2 (1 + 2 (0 + 2 (1 + 2 (1))))
- et 26 = A (0 + 2 (1 + 2 (0 + 2 (1 + 2 (1))))) = (a ((a (a) 2) 2) 2) 2
- L'informatique:
(A) 2 = a 2
un (a) = a 2 3 (qui est un 3 = a (a) 2)
(A 3) 2 = 3 a 3 + 3 a 2 + a + 4 (qui est un 6 = (a (a) 2) 2)
(3 a 3 + 3 a 2 + a + 4) = 2 2 a 2 + 3 (qui est un 12 = ((a (a) 2) 2) 2)
un (2 a 2 + 3) = (2 a 3 + 3 a) (qui est un 13 = a ((a (a) 2) 2) 2)
(2 a 3 + 3 a) 2 = 3 a 3 + a + 2 4 (qui est un 26 = (a ((a (a) 2) 2) 2) 2) - Ainsi, un 26 3 = a 3 + a + 2 4
- Essayez un ∈GF (5 4)
- un (5 4 -1) = 1
- un (5 4 -1) / 2 = 1 (si a est pas primitive - un en fait de l'ordre a 39)
- Essayez (a 1) ∈GF (5 4)
- (A 1) (5 4 -1) = 1
- (A 1) (5 4 -1) / 2 = 4 ≠ 1
- (A 1) (5 4 -1) / 3 = 3 a 2 a 3 ≠ 1
- (A 1) (5 4 -1) / 13 = a + a 2 + a 3 ≠ 1
Donc, (+1) a pour exactement 624 et primitive. Ainsi, nous avons montré que le polynôme x 4 x 2 3 3 x 2 + x + 1 est irréductible.
annexes
A. Notes de programmation de base
Taille - Précision multiple
Certaines des questions les plus intéressantes dans la théorie des nombres de calcul impliquent un grand nombre. Cela peut être un problème dans la plupart des langues et des machines ne supportent que des nombres entiers jusqu'à une certaine taille fixe, généralement 64 bits 2 (environ 1,6 × 10 19) ou 32 bits (2 à environ 4 × 10 9).
Langages de programmation
Les éléments suivants sont simples langues interprétées dans lequel j'ai écrit des programmes de la théorie des nombres de base, adapté à une utilisation en classe et à la modification.
Plus de détails sur la programmation de la théorie des nombres se trouvent dans un document connexe ici.