Factoriser un entier en produit de deux nombres premiers

AFmika Messages postés 25 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 24 juin 2016 - 6 oct. 2015 à 13:22
AFmika Messages postés 25 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 24 juin 2016 - 3 janv. 2016 à 16:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/101196-factoriser-un-entier-en-produit-de-deux-nombres-premiers

AFmika Messages postés 25 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 24 juin 2016
3 janv. 2016 à 16:50
Le principe de cet algorithme n'a pas vraiment rien a voir avec la decomposition d'un nombre en produit de plusieurs facteurs premiers car ici on veut chercher un ou des couples de deux UNIQUES nombres premiers formant ce nombre (dans le cas de la recherche cles RSA) . Le principal atout de cette simulation de l'algorithme de Shor est de factoriser un nombre le plus rapidement possible (en temps convenable) mais pour que cela marche il faudrait un ordinateur quantique : il existe la bibliotheque javascript Jsqubit qui simule un ordinateur quantique plus ou moins efficacement.
Mon algorithme fait un peu pres la meme chose sauf qu'ici il n'y a pas de lieu de calcul quantique.
Pas mathematique dites vous? ce n'est pas du random pur comme vous le pretendez mais du random purement probabiliste d'ailleur la frequence de generation des bons nombres est le principal atout de l'algorithme de Shor ce qui le rend 'magique' entre autre car les nombres sont souvent adequats et repondent aux nombres attendus .
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
11 oct. 2015 à 17:01
Bonjour,
Le programme factor1.exe de Thomas R. Nicely met 6 milisecondes pour factoriser
2^150 + 1 = 1427247692705959881058285969449495136382746625 en :
5*5*5*13*41*61*101*1201*1321*8101*63901*268501*13334701*1182468601
et il permet d'aller bien plus loin. C'est pour cela qu'il est intéressant de le signaler.
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
11 oct. 2015 à 14:54
Bonjour KX, au vu de ce que je lis, cette source est hors charte et donc mérite la suppression (ce qui sera fait juste après l'appui du Valider...), mais je laisserai les commentaires pour l'instant.
Cependant, il me semble plus judicieux que tu postes un snippet avec ton code
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
11 oct. 2015 à 11:24
Outre le fait que tu ais volontairement masqué le code source sur un site communautaire de partage de code, que tu imposes une licence "Toutes copies ou modification sans autorisation sont interdites" qui n'a aucune valeur sur ce site (en Creative commons V3.0) et que tu fasses la pub pour ta page facebook, ton code est en plus très mauvais.

Tu fais une recherche mathématique que tu dis être "polynomiale" alors que ton algorithme se base sur un random, c'est absurde ! Quand je reprends ton exemple 6 = 2*3 et que cela me renvoie une erreur, je ne peux pas te donner plus que 1/5 à l'évaluation du code...

Un petit conseil pour améliorer ta manière de programmer : ne mélange pas calcul et présentation, si tu fais un algorithme mathématique le résultat doit être un objet mathématique (dans ton cas, la liste des facteurs premiers), pas une modification de la page, il ne faut pas tout mélanger.

Sinon pour ceux que ça intéresserait, voici un algorithme linéaire pour faire un vrai calcul de décomposition en facteur premiers qui fonctionne dans tous les cas.

<html>
<head>
<script>
    function primeFactorization(n) {
        if (isNaN(n) || n == 0)
            return [];
        if (n < 0)
            n = -n;
        var result = [];
        for (i = 2; i <= n;) {
            if (n % i == 0) {
                result.push(i);
                n /= i;
            } else {
                i++;
            }
        }
        return result;
    }
</script>
</head>
<body>
    Nombre entier :<br/>
    <input type="text" id="n" maxlength="7"
        onkeyup="document.getElementById('r').value = primeFactorization(document.getElementById('n').value)"/>
    <br/>
    Décomposition :<br/>
    <input type="text" id="r" disabled/>
</body>
</html>

Attention : pour les très grands nombre premiers, le calcul peut prendre du temps. J'ai donc limité la taille de l'input à 7 caractères, le calcul le plus long sera celui de n=9999991, qui répond en temps correct.
AFmika Messages postés 25 Date d'inscription mardi 14 juillet 2015 Statut Membre Dernière intervention 24 juin 2016
11 oct. 2015 à 08:58
Non ici il n est pas question de decomposer un nombre mais de trouver pour un entier N>0 : deux diviseurs p et q qui sont premiers.
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
6 oct. 2015 à 19:47
Bonjour à tous,
Je signale : http://www.trnicely.net/ où il y a le fichier factor1.zip qui contient le source en langage C et l'exécutable d'un bon logiciel pour factoriser des entiers avec des performances très correctes.
@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
6 oct. 2015 à 19:10
surtout q' il existe des désobfusquateur c'est une mesure inutile.
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
6 oct. 2015 à 13:30
Bonjour, merci de poster le code en clair.
Rejoignez-nous