Algo nombres premiers
Fermé
jeje_42
-
17 févr. 2009 à 15:59
TiboleParano Messages postés 498 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 7 avril 2015 - 14 oct. 2009 à 13:34
TiboleParano Messages postés 498 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 7 avril 2015 - 14 oct. 2009 à 13:34
A voir également:
- Algo nombre premier
- Premier pro - Télécharger - Montage & Édition
- Nombre facile - Télécharger - Outils professionnels
- Dans la présentation, sans modifier leur position dans la feuille : passez le rectangle noir en arrière-plan ; passez le rectangle bleu au premier plan ; passez le rectangle hachuré au premier plan. quel mot apparaît ? ✓ - Forum LibreOffice / OpenOffice
- Supprimer espace nombre excel ✓ - Forum Excel
- Ahs premier avis ✓ - Forum Consommation & Internet
2 réponses
TiboleParano
Messages postés
498
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
7 avril 2015
61
14 oct. 2009 à 13:34
14 oct. 2009 à 13:34
oui, comme dit LennyPourVoir, pour un algorithme de nombres premiers tu divise le nombre par les entiers jusqu'à sa racine carrée: s'il n'y a pas de solution [=0] avant, il n'y en aura pas d'autres après, et le nombre est premier
ensuite, pour optimiser l'algo, vu qu'au bout d'un certain nombre de nombres (haha) il doit bien ramer, on peut srappeller le théoreme de mon prof de terminale, celui qui explique pourquoi il existe une infinité de nombre premier:
si P[0] est le premier nombre premier (2); P[1] le 2e (3) ... et P[n] le dernier trouvé dans ta liste, alors P[1]*P[2]*...*P[n] n'est pas premier, vu qu'il peut être divisé par les nombres premiers précédents, mais (P[1]*P[2]*...*P[n]) +1 l'est :)
ensuite, pour optimiser l'algo, vu qu'au bout d'un certain nombre de nombres (haha) il doit bien ramer, on peut srappeller le théoreme de mon prof de terminale, celui qui explique pourquoi il existe une infinité de nombre premier:
si P[0] est le premier nombre premier (2); P[1] le 2e (3) ... et P[n] le dernier trouvé dans ta liste, alors P[1]*P[2]*...*P[n] n'est pas premier, vu qu'il peut être divisé par les nombres premiers précédents, mais (P[1]*P[2]*...*P[n]) +1 l'est :)
LennyPourVoir
Messages postés
10
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
18 février 2009
1
17 févr. 2009 à 18:10
17 févr. 2009 à 18:10
#!/bin/bash
i=2
while [ $(($1%i)) -ne 0 ]
do
i=$((i+1))
echo $i
done
if [ $i -ne $1 ]; then
echo " $1 n'est pas premier ! voici deux diviseurs :"
echo $i
echo $(($1/i))
else
echo " $1 est premier !"
fi
Voilà qui devrait mieux marcher, par ailleurs ton algo n'est pas du tout optimisé.
Si le nombre n'est pas divisible par 2 on peut ajouter 2 à i ...
De plus dès que le quotient dépasse le diviseur on peut s'arrêter ....
Pour 51 inutile l'aller jusqu'à 51, jusqu'à 7 suffit ! (7*7=49, 8*8=64)
i=2
while [ $(($1%i)) -ne 0 ]
do
i=$((i+1))
echo $i
done
if [ $i -ne $1 ]; then
echo " $1 n'est pas premier ! voici deux diviseurs :"
echo $i
echo $(($1/i))
else
echo " $1 est premier !"
fi
Voilà qui devrait mieux marcher, par ailleurs ton algo n'est pas du tout optimisé.
Si le nombre n'est pas divisible par 2 on peut ajouter 2 à i ...
De plus dès que le quotient dépasse le diviseur on peut s'arrêter ....
Pour 51 inutile l'aller jusqu'à 51, jusqu'à 7 suffit ! (7*7=49, 8*8=64)