Die Mathematik ist die Königin der Wissenschaften und die Zahlentheorie ist die Königin der Mathematik.
Carl Friedrich Gauss
L'ensemble des entiers naturels non nuls se note , il s'agit de
Dans tout ce qui suit : .
Python3 est capable de travailler avec des entiers aussi grands que la mémoire de l'ordinateur le permet. Les opérations élémentaires respectent les priorités. La puissance s'obtient avec **
.
Exemple
Calculer>>> (10**9 + 7)**4 1000000028000000294000001372000002401
On a bien , et :
,
où , avec .
est le dividende, est le diviseur.
est le quotient, est le reste.
On parle de division modulo , (divmod en abrégé).
Exemple
quotient , reste ,
on a bien , et .On dit que modulo est égal à .
⚠️ Attention
quotient , reste ; est faux,
on a bien , mais pas .
Test avec Python :
>>> 13*30 + 20 == 410 True >>> 20 < 30 True
Avec Python3, le quotient entier de par s'obtient avec a // b
,
et le reste dans cette division s'obtient avec a % b
.
On peut aussi obtenir le quotient et le reste simultanément avec divmod(a, b)
.
Exemple, avec la situation précédente :
>>> 410 // 30 13 >>> 410 % 30 20 >>> divmod(410, 30) (13, 20) >>> divmod(410, 13) (31, 7)
Exercice :
Indice : Une méthode est de calculer la puissance, puis son reste modulo .
Solution :
>>> (42**1337) % 1000) 552Les trois derniers chiffres sont donc : 5, 5 et 2.
Ce genre de question est réellement fondamental pour les applications comme la cryptographie ; il existe des méthodes bien plus efficaces, nous les aborderons ! La sécurité (informatique, bancaire, militaire), repose en partie sur ces méthodes.
Avec Python, on peut la calculer en important une fonction incluse dans le module math
:
>>> from math import factorial >>> factorial(5) 120
Attention, sur la calculatrice NumWorks, la version de Python n'inclut pas factorial
, on peut alors créer le script suivant :
# Version simple def factorial(n): ans = 1 for x in range(1, n+1): ans = ans * x return ans # Version NSI, avec la récursivité def factorial(n): """ Renvoie la factorielle de n n doit être un entier positif. Version récursive pour les NSI >>> factorial(0) 1 >>> factorial(5) 120 """ if n == 0: return 1 else: return n * factorial(n-1)
Indice : on pourra utiliser que .
Réponse :
Avec Python
>>> A = 1 >>> for x in range(1, 1001): ... A = A * x >>> 10**300 < A < 10**3000 True
Sans Python,
Obtenir des majorations et des minorations est une activité importante des mathématiques, cela permet d'obtenir des encadrements. Il existe de nombreuses méthodes...
Remarque complémentaire (hors programme)
Il existe une formule qui donne un meilleur encadrement de , il s'agit de la formule de Stirling.
Dans , les multiples de sont :
est un multiple de , mais aussi de .
, donc est un multiple de et de .
Les multiples de sont :
« est un diviseur de » équivaut à « est un multiple de ».
On note dans ce cas « », et on peut dire « divise ».
Dans le cas contraire, on note « », et on peut dire « ne divise pas ».
Exemples :
Avec et , on a :est un multiple de , et donc est un diviseur de .
est un multiple de , et donc est un diviseur de .
est un multiple de , et donc est un diviseur de .
est un multiple de , et donc est un diviseur de .
sont des diviseurs de .
Y en a-t-il d'autres ? Cf III]
Propriété : le reste dans la division de par est nul.
Exemple : avec Python3, on calcule ce reste avec
n % a
.
>>> 143 % 13 0 >>> 17 % 3 2
# Exemple pour les élèves aussi en NSI for n, a in ((143, 13), (17, 3)): if n % a == 0: print(f"{n} est divisible par {a}") else: print(f"{n} n'est pas divisible par {a}")
143 est divisible par 13 17 n'est pas divisible par 3
On rappelle que , et sont des entiers non nuls.
Propriété : si est un diviseur de , alors est entier et aussi un diviseur de .
Preuve : Si est un diviseur de , alors tel que , ainsi est entier et un diviseur de .
Propriété : Si , avec , alors .
Preuve 1 : , avec croissante sur , on a: , donc .
Preuve 2 : Si , alors ; absurde.
Utilisation : Pour obtenir la liste des diviseurs de non nul, il suffit de trouver ceux inférieurs à , d'y adjoindre leur 'binôme', et de tester éventuellement .
Exemple 1 : Trouver la liste des diviseurs de .
On va tester tous les diviseurs de jusqu'à . En effet, .
La liste des diviseurs de est , il y en a .
Il faut ne compter qu'une fois les diviseurs d'un carré, comme
Exemple 2 : Trouver la liste des diviseurs de .
On va tester tous les diviseurs de jusqu'à .
La liste des diviseurs de est , il y en a .
Remarques :
ne possède qu'un seul diviseur : lui-même. C'est le seul tel nombre.
possède exactement deux diviseurs : et lui-même.
possède exactement deux diviseurs : et lui-même.
possède exactement trois diviseurs : , lui-même, et .
possède exactement deux diviseurs : et lui-même.
Exercice : Créer un script qui donne la somme des diviseurs d'un entier.
Réponse :
# Version spé Maths def somme_diviseurs(n): S = 0 for d in range(1, n+1): if n % d == 0: S = S + d return S # Version spé NSI def somme_diviseurs(n): """Renvoie la somme des diviseurs de l'entier n >>> somme_diviseurs(2) 3 >>> somme_diviseurs(6) 12 """ return sum(d for d in range(1, n+1) if n%d == 0)
Pour tout entier , on a , donc possède au moins deux diviseurs : et lui-même.
Définition : Un nombre premier est un entier qui a exactement deux diviseurs : et lui-même.
Les nombres premiers inférieurs à sont : .
Remarque : Un entier est soit premier, soit composé.
Son plus petit diviseur, excepté , est premier.
est à part, il n'est ni premier, ni composé.
Théorème : Il y a une infinité de nombres premiers.
Preuve 1 : Soit , on considère , qui n'a aucun diviseur entre et , donc son plus petit diviseur est supérieur à , il est premier. On déduit qu'il y a des nombres premiers aussi grands que l'on veut, une infinité donc.
Preuve 2 : Par l'absurde, supposons qu'il y ait un nombre fini de nombres premiers notés (pour de à ). On considère . On sait que est premier, donc et qui possède alors un plus petit diviseur (hors ) qui est un nombre premier . Cependant le reste de la division de par est qui n'est donc pas un diviseur. Contradiction.
On peut créer un script qui teste la primalité d'un entier :
def is_prime(n): "Renvoie True si n est premier, False sinon" if n < 2: return False for d in range(2, n): if n % d == 0: return False return True
Que l'on teste :
>>> [n for n in range(20) if is_prime(n)] [2, 3, 5, 7, 11, 13, 17, 19]
Cette méthode est lente avec des nombres trop grands, (comme un milliard ou plus).
Dans le pire des cas, la boucle de is_prime fait presque tours, donc un nombre d'opérations proportionnel à . On dit alors que sa compléxité temporelle est en .
def is_prime(n): """ Test de primalité Version améliorée ; O(√(n)) """ if n < 2: return False for d in range(2, n): if n % d == 0: return False if d * d > n: return True return True
>>> [n for n in range(10**9, 10**9+100) if is_prime(n)] 1000000007, 1000000009, 1000000021, 1000000033, 1000000087, 1000000093, 1000000097,
Cette méthode fait, dans le pire des cas, tours de boucle pour savoir si est premier. On dit alors que sa complexité temporelle est en .
Elle sera lente pour des entiers premiers de chiffres ou plus, ou composés avec le plus petit facteur premier à chiffres ou plus. Dans ces cas, elle fera plus d'un milliard d'opérations, ce qui n'est pas instantané. Elle restera rapide pour des nombres très grands qui possèdent un petit facteur premier.
Exercice
is_prime
précédente sera pourtant très rapide pour répondre avec cette entrée.Réponse :
factorial(101) > 10**18
renvoie True
.Propriété : Tout entier supérieur à est produit de nombres premiers. On parle de décomposition en facteurs premiers. Elle est unique, à l'ordre près des facteurs.
Exercice : Donner la décomposition en facteurs premiers de .
On commence par chercher les petits facteurs premiers :
n'est pas facteur ; , oui.
On continue avec à décomposer, et on reprend par , puis , , , ...
, donc
, et on reconnait comme nombre premier. Ainsi :
est la décomposition en facteurs premiers.
Pour en lire davantage : https://fr.wikipedia.org/wiki/Nombre_premier
On rappelle que , et sont des entiers non nuls.
On note l'ensemble des diviseurs de , c'est un ensemble non vide et fini, étant le plus grand élément.
Propriété : appartient à et , ainsi leur intersection est non vide, qui est de plus une partie finie. Cette intersection possède donc un plus grand élément.
Définitions :
est le plus grand élément de .
C'est le Plus Grand Commun Diviseur, (gcd : greatest common divisor ; in english).
est le Plus Petit Commun Multiple à et , (lcm : least common multiple ; in english). C'est un entier inférieur ou égal à qui est un multiple commun trivial.
Exemple 1
et
, donc
.
Enfin .Exemple 2
Les multiples de sont :
Les multiples de sont :Ainsi .
⚠️ Attention, avec ces définitions, le calcul peut être très laborieux, nous verrons d'autres méthodes plus efficaces.
Réponse :
et
, donc
.
Enfin .
Les multiples de sont :
Les multiples de sont :
Ainsi .
Avec la réforme des collèges, une nouvelle méthode a été enseignée en classe de troisième, mais elle est peu connue des élèves... Voici donc un rappel, ou une découverte pour certains :
Méthode : avec la décomposition en facteurs premiers.
Exemple 1 : avec les questions précédentes, on peut répondre plus vite :
- , et , donc .
- , et , donc .
Exemple 2
Avec , et , on a :
- .
.
Remarque : On préfère connaître la décomposition en facteurs premiers, plutôt que le résultat numérique... La décomposition est une donnée plus précieuse ; réellement !!!
Propriété :
Exemple
Preuve
Pour tous entiers et , on a :
Réponse :
- On a et , donc et .
- On a et , donc et .
Exercice (type brevet)
Guillaume veut répartir la totalité de dragées au chocolat et dragées aux amandes dans des sachets ayant la même répartition de dragées au chocolat et aux amandes.
- Peut-il faire sachets ? Justifier
- Quel nombre maximal de sachets peut-il réaliser ? Justifier
- Combien de dragées de chaque sorte y aura-t-il dans chaque sachet ? Justifier
Réponse :
- Certes est divisible par , mais pas (qui n'est même pas pair), donc on ne peut pas faire un partage homogène de la totalité. Il y aurait un reste !
- Avec une même répartition des sachets, et en utilisant tout, le nombre de sachets est un diviseur du nombre de dragées (chocolat et aussi amandes), de plus on veut le maximum, on cherche donc le .
- Ainsi
- Guillaume pourra faire au maximum sachets équitables, sans perte.
- La composition d'un sachet sera de dragées au chocolat, et dragées aux amandes.