Outil pour décomposer un nombre en produit de facteurs premiers (toute taille, sans limite), décomposition comme multiplication de nombres premiers qui est unique pour tous les nombres entiers.
Décomposition en Nombres Premiers - dCode
Catégorie(s) : Arithmétique
dCode est gratuit et ses outils sont une aide précieuse dans les jeux, les maths, les énigmes, les géocaches, et les problèmes à résoudre au quotidien !
Une suggestion ? un problème ? une idée ? Écrire à dCode !
En mathématiques, la décomposition en produit de facteurs premiers (aussi connue comme la factorisation entière en nombres premiers) consiste à écrire un entier strictement positif sous forme d'un produit de nombres premiers.
Cette factorisation est unique et existe pour tous les nombres et a de nombreuses applications notamment en cryptographie.
Pour trouver la décomposition en produit de facteurs premiers d'un nombre $ N $ il n'existe pas de formule mathématique. Pour y parvenir, il existe des algorithmes dont le plus basique tente de diviser le nombre $ N $ par l'ensemble des facteurs premiers $ p $ qui sont inférieurs à $ N $. Si $ p $ est un diviseur de $ N $ alors recommencer en prenant un nouveau $ N = N/p $ tant qu'il reste des diviseurs premiers envisageables.
Exemple : Soit le nombre $ N = 147 $, les nombres premiers inférieurs à $ N = 147 $ sont $ 2, 3, 5, 7, 11, 13, … $. L'algorithme de décomposition en produit de facteurs premiers de $ 147 $, commencer par tenter la division par $ 2 $, or $ 147 $ n'est pas divisible par $ 2 $. continuer avec la division par $ 3 $, or, $ 147/3 = 49 $ donc $ 147 $ est divisible par $ 3 $ et $ 3 $ est un facteur premier de $ 147 $. Dans la suite, ne plus considérer $ 147 $ mais $ 147/3 = 49 $. Les nombres premiers inférieurs à $ 49 $ sont $ 2, 3, 5, 7, 11, 13, … $ Essayer de diviser $ 49 $ par $ 2 $, etc.
Exemple : Au final, les facteurs $ 3, 7, 7 $ sont obtenus et $ 3 \times 7 \times 7 = 147 $, qui s'écrit aussi $ 147 = 3 \times 7 ^ 2 $ (l'exposant évite la répétition).
Cette décomposition est possible quel que soit le nombre de départ, c'est un théorème fondamental de l'arithmétique.
Exemple : $ 123 = 3 \times 41 $, $ 1234 = 2 \times 617 $, $ 12345 = 3 \times 5 \times 823 $ ou encore $ 123456 = 2 ^ 6 \times 3 \times 643 $
Le problème avec les méthodes (ou algorithmes) de décompositions en nombres premiers est qu'elles sont très longues lorsque les nombres sont très grands. Dès que les facteurs ont plusieurs dizaines de chiffres et ne sont pas triviaux, plusieurs minutes voire heures voire jours de calculs peuvent être nécessaires, même pour les plus puissants ordinateurs.
Le RSA Factoring Challenge est une liste de grands nombres semi-premiers (le produit de deux grands nombres premiers) à factoriser avec plusieurs milliers de dollars à la clé, le 'RSA-100' (un entier de 100 chiffres) a été factorisé en quelques jours, le 'RSA-250' (un entier de 250 chiffres) a été factorisé après plusieurs années de calcul intensif.
La durée du calcul n'est pas prévisible mais le temps de calcul nécessaire pour décomposer des nombres cryptographiques de plusieurs centaines de chiffres se compte en milliers de cœur-année (quantité de travail qu’un seul cœur de processeur peut accomplir en une année entière : 365 jours, 24 heures par jour de calcul continu).
dCode réalise les calculs coté serveur tant que possible, mais si le nombre demandé possède beaucoup de chiffres, le calcul se poursuivra sur votre navigateur grâce à un applet WebAssembly (wasm) de Dario Alejandro Alpern (License GPL v3.0) la durée de calcul dépendra donc des performances de votre ordinateur/téléphone.
Il existe les algorithmes de factorisation par divisions itératives classiques, l'algorithme rho de Pollard, les courbes elliptiques ou encore l'algorithme du crible quadratique. dCode utilise une combinaison de tous pour factoriser rapidement.
La liste de tous les nombres premiers commence par : 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997… Et il y en a une infinité.
Les nombres premiers sont définis uniquement parmi les entiers naturels, c'est-à-dire les nombres positifs (par de nombres premiers négatifs).
La démonstration de l'infinité des nombres premiers est la suivante :
Si il existe $ p $, un nombre fini de nombres premiers, alors il existe $ p\# = 2 \times 3 \times 5 \times \cdots $ le produit de la liste de tous ces nombres premiers (parfois appelé la primorielle).
Soit $ q = p\#+1 $, alors, ce nombre n'est divisible par aucun facteur premier de la liste car le reste de la division de $ q $ par n'importe quel nombre premier de la liste sera égal à $ 1 $.
Donc $ q $ est un nouveau nombre premier ou a un facteur premier non présent dans la liste, ce qui contredit l'hypothèse.
Il existera donc toujours des nombres premiers supérieurs à $ p\# $ quel que soit $ p $, il y en a donc une infinité.
// javascript
function decomposition_nombres_premiers(n) {
if (!n || n < 2)
return [];
var f = [];
for (var i = 2; i <= n; i++){
while (n % i === 0){
f.push(i);
n /= i;
}
}
return f;
};
// Python
def decomposition_nombres_premiers(n):
i = 2
facteurs = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
facteurs.append(i)
if n > 1:
facteurs.append(n)
return facteurs
dCode se réserve la propriété du code source pour "Décomposition en Nombres Premiers". Sauf code licence open source explicite (indiqué Creative Commons / gratuit), l'algorithme pour "Décomposition en Nombres Premiers", l'applet ou snippet (convertisseur, solveur, chiffrement / déchiffrement, encodage / décodage, encryptage / décryptage, traducteur) ou les fonctions liées à "Décomposition en Nombres Premiers" (calculer, convertir, résoudre, décrypter / encrypter, déchiffrer / chiffrer, décoder / encoder, traduire) codés en langage informatique (Python, Java, C#, PHP, Javascript, Matlab, etc.) ou les données, en téléchargement, script, ou les accès API à "Décomposition en Nombres Premiers" ne sont pas publics, idem pour un usage hors ligne, PC, mobile, tablette, appli iPhone ou Android !
Rappel : dCode est gratuit.
Le copier-coller de la page "Décomposition en Nombres Premiers" ou de ses résultats est autorisée (même pour un usage commercial) tant que vous créditez dCode !
L'exportation des résultats sous forme de fichier .csv ou .txt est gratuite en cliquant sur l'icone export
Citer comme source bibliographique :
Décomposition en Nombres Premiers sur dCode.fr [site web en ligne], consulté le 21/12/2024,