DÉCOMPOSITION EN FACTEURS PREMIERS

Signaler
Messages postés
647
Date d'inscription
samedi 30 décembre 2000
Statut
Membre
Dernière intervention
20 juillet 2012
-
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
-
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/51516-decomposition-en-facteurs-premiers

Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
3
Merci de ta contribution PROFTNJ. J'ai opéré des modifications dans l'option d'affichage en reprenant un peu de ton idée. J'ai divisé l'option en 3:
-Basique
-Symbole "X" ou "."
-Chaîne mathématique insérable dans un système de calcul informatique standard par copier-collé (cela m'a été demandé par JDMCREATOR [cf: premier commentaire], en tout cas j'ai compris ça comme cela)
Messages postés
54
Date d'inscription
lundi 10 juillet 2006
Statut
Membre
Dernière intervention
11 septembre 2011

De très petites modifications pour que l'affichage du résultat soit compréhensible par de jeunes étudiants:

--------------------

<script language="javascript" type="text/javascript">
function affich(a)// je met cette fonction ainsi pour ceux qui désire modifier le mode d'affichage....
{
document.getElementById("texte_2").innerHTML=a;
}
function choixcaract(form)
{
if(form.choice.checked){return " . ";}
else{return " × ";}
}
var JC , JCV;
function JCVD(x)//...Security
{
JC=parseInt(x);
JCV=JC.toString();
if(JCV.length==x.length && JCV!="NaN"){return Math.abs(JC);}
else{return 0;}
}
var textea , nb2 , nb1 , nb , limite , i , j , x , caract;
function process(form)
{
nb=JCVD(form.fact.value);
textea="résultat : "+nb+" = ";
if(nb<=2)
{
if(nb!=2){textea +="Ni premier ni composé.";}
else{textea +="Nombre premier.";}
}
else
{
caract=choixcaract(form);
nb1=nb;
j=0;
i=2;
x=0;
limite=Math.sqrt(nb1)+1;
while(1)
{
if(i>limite)
{
if(nb==nb1){textea +="Nombre premier.";}
else
{
if(nb1>1){textea +=caract+nb1;}
}
break;
}
nb2=nb1/i;
if(nb2-Math.floor(nb2)>0.0000000000001)
{
if(j>0)
{
if(x!=0){textea +=caract;}
else{x=1;}
if(j==1){textea +=i;}
else{textea +=i+""+j+"";}
j=0;
}
i++;
}
else
{
j++;
nb1=nb2;
}
}
}
}
</script>
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
3
@AMROUNIX,

j'ai testé ton code que je trouvais bien, mais je me suis aperçu qu'il est beaucoup plus gourmand en ressource que le mien lorsque j'ai entré 98765432198998
En effet, à la saisie de ce chiffre avec ton code, le navigateur lance la fenêtre "le script ne répond pas" ce qui est normal avec de si grand chiffre, mais ne semble pas reprendre, ou met énormément de temps à finir ça tâche, une fois que l'on clique sur continuer. Alors que celui de la source fini avant d'en arriver à la fameuse fenêtre.

Ton code aborde une approche plus "technique" que mathématique du javascript qui manifestement semble préjudiciable au niveau des performances.
Messages postés
79
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2010

voila une version un peu plus détaillé, prêt à être copier-coller dans un fichier

<html>
<script language="javascript">
/*
methode de composition en facteur premier
x : valeur , lst : tableau de la décomposition
*/
function pgc(x,lst)
{
i = 2; /*on test de division de x/i avec i allant de 2 à x/2 ( ca sert à rien d'alleur au dessus) */
fin = parseInt(x/2,10) + 1;
while (i<fin) /*on boucle jusqu'a fin (si ca sort c'est qu'il y'a plus de division possible) */
{
if (x%i==0) /*test du modulo de x par i (modulo : resultat de la division, si ==0 alors le nombre est divisible) */
{
lst.push(i); /*si le nombre est divisible alors on le met dans la liste*/
return pgc(parseInt(x/i,10),lst); /*on rappel la méthode en récursive*/
}
i++; /*on incrément i pour la boucle, ca signifie que le nombre n'est pas divisible par i */
}
if (i==fin||x<2) /*on récupère le dernier élement (+cas extrême) et on le place dans la liste*/
{
lst.push(x);
}
/*on retourne la liste*/
return lst;
}

/*méthode de calcul et d'affichage de la décomposition
val : valeur a décomposer */
function calcul(val)
{
/*test si c'est un chiffre*/
if (!(/^\d+$/).test(val)) {alert("ce n'est pas un nombre !"); return;}
/*récupère la liste a décomposer*/
listDecompose = pgc (parseInt(val,10),new Array());
/*affiche la réponse en séparant les éléments de la liste par "*" */
document.getElementById("resultat").value = listDecompose.join("*");
}

</script>

Entrer un nombre :

Resultat de la décomposition :

</html>
Afficher les 13 commentaires