Diviseurs & nombres premiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 823 fois - Téléchargée 31 fois

Contenu du snippet

Ce code se décompose en 3 fonctions indépendantes qui permettent respectivement de calculer les diviseurs d'un nombre, de déterminer si un nombre est premier ou non et de rechercher tous les nombres premiers entre 2 valeurs. Le script est compatible avec IE (Win et Mac), Safari, Netscape...

Source / Exemple :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
	<head>
		<title>@Calculs des diviseurs d'un nombre et des nombres premiers en Javascript@</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
<!--
function diviseur()
{
div=document.calculs.entree1.value;
if (div != "")
{
for (i=1; i<=div; i++)
{
mod=div % i;
if (mod == 0)
document.calculs.sortie.value+=i+", ";
}
}
else
alert("il manque une valeur !");
}

function nbrepremier1()
{
nbre1=document.calculs.entree1.value;
if (nbre1 > 2)
{
premier=true;
for (var i=2; i<=Math.ceil(Math.sqrt(nbre1)); i++)
{
mod=nbre1 % i;
if (mod == 0)
{
premier=false;
break;
}
else
continue;
}
if (premier != false)
alert(nbre1+" est un nombre premier");
else
alert(nbre1+" n'est pas un nombre premier");
}
else
alert("Choisissez une valeur minimale de 3 !");
}

function nbrepremier2()
{
incr=0;
nbre1=document.calculs.entree1.value;
nbre2=document.calculs.entree2.value;
if (nbre1 >= 10 && nbre2 >= 11)
{
for (var z=nbre1; z<=nbre2; z++)
{
premier=true;
for (var i=2; i<=Math.ceil(Math.sqrt(z)); i++)
{
mod=z % i;
if (mod == 0)
{
premier=false;
break;
}
else
continue;
}
if (premier != false)
{
incr++;
document.calculs.sortie.value+=z+", ";
}
}
window.status=incr+" nombres premiers trouvés";
}
else
alert("Choisissez une valeur minimale de 10 et de 11\nrespectivement comme valeur basse et haute");
}

function cleanup()
{
document.calculs.sortie.value="";
document.calculs.entree1.value="";
document.calculs.entree2.value="";
}
-->
</script>
	</head>
	<body bgcolor="lightblue">
<h2 align="center">Voici quelques programmes sur les nombres<br />(1)</h2><hr width=75% />
<div align="justify">Cette page comprend 3 fonctions :<ul><li>Calculer les diviseurs d'un nombre;</li><li>Déterminer si un nombre est premier ou non;</li><li>Rechercher les nombres premiers entre 2 valeurs limites (peut nécessiter beaucoup de puissance de calcul).</li></ul></div>
<form name="calculs">
<input type="text" name="entree1" size="15"/> <b>limite basse</b>
<br />
<input type="text" name="entree2" size="15"/> <b>limite haute (pour le calcul des "nombres premiers(2)")</b><br />
<textarea name="sortie" rows="20" cols="90"></textarea>
<br />
<u>Zone de résultats</u>
<br /><br />
<input type="button" onClick="diviseur();" value="DIVISEURS" /> Recherche des diviseurs d'un nombre.
<br />
<input type="button" onClick="nbrepremier1();" value="NOMBRES PREMIERS(1)" /> La valeur choisie est-elle un nombre premier ?
<br />
<input type="button" onClick="nbrepremier2();" value="NOMBRES PREMIERS(2)" /> Recherche des nombres premiers entre "limite basse" et "limite haute".
<br />
<br />
<input type="button" onClick="cleanup();" value="EFFACER LES ANCIENNES VALEURS" /> Effacer les valeurs des différents champs de saisie.
</form>
	</body>
</html>

Conclusion :


Le script a été optimisé : le nombre de calculs a été fortement réduit pour accélérer le temps de traitement.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
4 avril 2006

J'utilise Ie6 et j'ai refait plusieurs copier-coller du code source dans le bloc note pour n'obtenir toujours rien.
Dommage, car ce fichier peut être très utile pour des élèves de CM2.
Si quelqu'un peut m'envoyer un bon fichier à cette adresse, je l'en remercie.
ecole-lenglet@wanadoo.fr
Messages postés
11
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

pour lenglet:

Quel navigateur utilises-tu ?

Pour avoir les diviseurs d'un nombre, il faut rentrer ce nombre dans le premier champ de saisie et cliquer sur le bouton "DIVISEURS".
Pour déterminer s'il est premier, rentre le nombre au même endroit mais clique ensuite sur "NOMBRES PREMIERS (1)".
Pour rechercher les nombres premiers entre 10 et 1000 par ex, rentre 10 dans le premier champ et 1000 dans le second, puis clique sur "NOMBRES PREMIERS (2).

Voilà
Messages postés
6
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
4 avril 2006

Je dois être stupide mais :
Recopiée dans le bloc note, la page html générée indique une erreur de script.
Je ne sais pas du tout où taper un nombre pour avoir ses diviseurs.
Si quelqu'un, forcément moins idiot que moi, peut me donner la soluce, merci...
Messages postés
11
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

J'ai fais des tests et il est impossible d'utiliser:
for (var i=2; i<=10; i++)
car le script sort des nombres qui ne sont pas premiers (notamment ceux dont les diviseurs sont des nombres premiers)
Messages postés
11
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

Merci pour cette info.
En effet, l'idée n'est pas mauvaise mais pourquoi éliminer les valeurs paires pour i ?
D'un autre côté je me demande si l'on ne peut pas simplement faire:
for (var i=2; i<=10; i++)
car j'ai l'impression que tous les nombres non premiers sont divisibles par au moins l'une des valeurs suivantes: 2,3,(4),5,(6),7,(8),9,(10). Ainsi on s'affranchi de la taille du nombre à tester et on va beaucoup plus vite surtout pour les grands nombres premiers....
Je fais des tests et je vois.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.