CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

nombre premier

Okami83
Okami83
Niveau 6
22 octobre 2007 à 21:53:01

Salut tout le monde, je fais appel à votre aide :

je dois en effet écrire un programme qui indique si un nombre entré au clavier et premier. On implentera l´algorythme simplique qui consiste à vérifier la divisibilité par les entiers successsifs de 2 à la moitié du nombre a tester. Je dois de même en déduire un prog qui afficher la liste des nombres premiers inferieur à 1000.

Voici mon prog

  1. include <stdio.h>
  2. include <stdlib.h>

int main(void)
{
int j, n, r;

printf("Entrez votre nombre n\n");
scanf("%d", &n);

for(j=2;j=n-1;j++){
r=n/j;
if(r<=1){printf("pas premier\n");

}
else{ printf("premier\n");
}
}
system("pause");
return 0;
}

:merci: de votre aide

novembre
novembre
Niveau 18
22 octobre 2007 à 22:06:02

Utilise plutot le modulo (reste de division euclidienne) pour savoir si ton nom n est divisible par un nombre j.
En effet si on peut écrire n sous la forme :
n = a*j, on aura n modulo j = 0.
L´opérateur modulo est % si je me rappelle bien.
Je te laisse "traduire" tout ça en c.
Sinon petite question, le fait de tester la divisibilité jusqu´à la moitié de n, ca vient de énoncé/prof ? Car aller jusqu´à la racine carrée est suffisant.

dnob700
dnob700
Niveau 10
22 octobre 2007 à 22:24:41

"if(r<=1)"

r est plus petit que 1 si et seulement si j est plus grand que la moitié de n, or comme tu fait aller j de 2 à n-1, ça va toujours se produire (pour n supérieur ou égale à 3). Mais tu n´a rien testé.
Essaye de trouver un test pour savoir si a divise b. novembre t´en à proposer un qui est certainement le meilleurs, mais il y a d´autre possibilité aussi

Okami83
Okami83
Niveau 6
22 octobre 2007 à 22:26:52
  1. include <stdio.h>
  2. include <stdlib.h>

int main(void)
{
int j, n, r;

printf("Entrez votre nombre n\n");
scanf("%d", &n);

for(j=2;j=n-1;j++){
r=n%j;
if(r==0){printf("pas premier\n");

}
else{ printf("premier\n");
}
}
system("pause");
return 0;
}

J´avais déja essayé avec le modulo comme ci dessus mais cela marche pas!
en tous cas merci de m´aider

Pseudo supprimé
Pseudo supprimé 22 octobre 2007 à 22:40:00

De plus, interrompre ta boucle lors de la découverte d´un nombre premier serait une bonne chose : rajoute le teste dans le prédicat de cette dernière. Pareil, inutile d´aller à n, aller à n/2 suffit. Et vas-y de 2 en deux : les nombres pairs>2 ne sont pas premiers, inutile de passer dessus :p

dnob700
dnob700
Niveau 10
22 octobre 2007 à 23:04:59

"j*j<n" est le test correct de ta boucle et non pas "j=n-1"

Pseudo supprimé
Pseudo supprimé 23 octobre 2007 à 01:39:16

D´autant qu´il effectue une affectation dans son prédicat :p

JujuDredd
JujuDredd
Niveau 10
23 octobre 2007 à 14:06:59

Et là il va écrire "Premier" à chaque diviseur testé incorrect...
Mieux vaut utiliser un booléen !

int result = n % 2 != 0;
for (j = 3; j*j <= n && result; j += 2)
{
result = n % j != 0;
}

if (result)
printf("Premier\n");
else
printf("Pas premier\n");

return 0;
}

Okami83
Okami83
Niveau 6
01 novembre 2007 à 11:49:44

Désolé pour l´absence mais merci à tout le monde j´ai donc réussi le programme

  1. include <stdio.h>
  2. include <stdlib.h>

int main (void)
{int i, nb, test;

test=0;

printf ("Entrez un nombre entier : ");
scanf ("%d", &nb);

for (i=2; i<nb; i++)
if (nb%i==0)
{
test = 1;
}
if (!test){
printf ("%d nombre premier\n", nb);
}

else{
printf ("%d n´est pas nombre premier\n", nb);
}

system("pause");

return 0;
}

__________________________________________________
________________

De même, je dois en déduire un prog qui afficher la liste des nombres premiers inferieur à 100 mais je ne sais pas comment faire .

novembre
novembre
Niveau 18
01 novembre 2007 à 12:06:32

Teste simplement, les nombres de 1 à 100 automatiquement sans les taper au clavier. T´as fait le plus dur, là c´est un truc tout con.

Okami83
Okami83
Niveau 6
01 novembre 2007 à 18:03:32

c´est inférieur a 100

Okami83
Okami83
Niveau 6
01 novembre 2007 à 18:03:58

zut c´est la liste des nombres inférieurs à 1000

dnob700
dnob700
Niveau 10
01 novembre 2007 à 20:32:54

ça ne change rien, c´est suffisement petit pour que tu puisse tous les tester.

Sachant qu´une bonne amélioration pour faire ça, c´est qu´une fois que tu as tout les nombre premier de 1 à N, pour savoir si N+1 est premier tu teste juste si N+1 est multiple des nombres premier compris dans [2..sqrt(N)] et non pas de tout les nombres. Ça fait moins de division ou de modulo à calculer.

Tu peut aussi utiliser un crible d´érathostène (?) si tu as vu ça en cours.

Okami83
Okami83
Niveau 6
02 novembre 2007 à 19:19:15

Qu´entends tu par tester?

novembre
novembre
Niveau 18
02 novembre 2007 à 20:34:53

C´est ce que tu fais actuellement pour un nombre tapé au clavier, tu testes s´il est premier ou non.

Neoknight
Neoknight
Niveau 10
02 novembre 2007 à 20:36:10

bool tmp=true;

for(int j=1;j<100;j++)
{
tmp=true;

for(int i=2;i<j;i++)
{

if(j%i==0)
{
tmp=false;
}

}
if(tmp)
{
cout<<j<<"\n";
}
}

cout<<"sont des nombres premier";

Okami83
Okami83
Niveau 6
02 novembre 2007 à 20:38:33

désolé mais je n´ai pas encore vu count

Neoknight
Neoknight
Niveau 10
02 novembre 2007 à 20:42:50

cout c´est printf en C :oui:

Okami83
Okami83
Niveau 6
02 novembre 2007 à 23:12:53

ok merci, j´ai fais sa mais j´ai que 1000 qui s´affiche!

  1. include <stdio.h>
  2. include <stdlib.h>

int main (void)
{int i, nb, test, j;

test=1;

for (i=1; i<1000; i++)
{
test = 1;
}
for (j=2; j<i; j++)
if(j%i==0)
{
test=0;
}

if(test)
{
printf("%d\n",j);
}

system("pause");

return 0;
}

Neoknight
Neoknight
Niveau 10
02 novembre 2007 à 23:20:39

mon code marche et j´ai une boucle imbriquée ds une autre moi :oui:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment