Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme C nombres premier

9 mars 2011 à 0:45:37

Bonjour, je veux faie un programme en C qui demande a l'utilisateur un nombre puis lui dit ce dernier est premier ou pas. J'y arrive pas si vous voulez bien m'aider

Merci
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 0:52:30

Un nombre premier est un nombre qui n'est divisible par aucun nombre apars 1 et lui-même.
Il faut tester avec chaque entier inférieure à celui entrer par l'utilisateur et supérieure à 1, si le reste de la division (nombreEntre/nombreInferieur) à un reste ou non. Si au moins une division n'a pas de reste, le nombre n'est pas premier.

Si tu veux plus d'aide, poste ton code. ;)
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

9 mars 2011 à 0:56:46

Bon déjà un petit rappel ne fait pas de mal: un nombre premier n'est divisible que par exactement 2 entiers naturel. Autrement dis il n'est divisible que par un et lui même ( 1 n'est pas un nombre premier) donc il faut prouver qu'il n'as aucun diviseur autre que 1 et lui même et là pas le choix faut tous les essayer! Cependant il existe un propriété qui nous dis qu'un nombre non premier à au moins un diviseur inférieur à la racine carré de lui même. Cela réduit déjà pas mal les recherches ;)
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:01:00

Mais ce que je n'arrive pas a faire, c'est que je ne sais pas coment faire pour tous les essayer :/
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:01:55

Un simple boucle for :
for(i=nombreEntre-1;i!=1;i--)
ou encore :
for(i=2;i!=nombreEntrer;i++)
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

9 mars 2011 à 1:12:15

En fait je dois mettre la boucle for que tu m'a donné, puis ensuite a l'interieur, je dois verifier que la division de nombreentre par i ( qui diminue a chaque fois ou augmente) n'a pas de reste. Faut pas que je mette une condition if a l'interieur de la boucle ? ( pour savoir que si ya un reste ca s'arrete et le nombre est premier).
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:14:30

Oui un if. Et pour connaitre le reste d'une division ? On utilise le modulo '%'.
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

9 mars 2011 à 1:21:32

Oui mais la tu fais mouliner ton pc pour rien! Version optimisée:
//test pour 2
//...
//test pour tous les autres
for(i=3; i<sqrt(nombreEntre); i =+ 2)
{
//test
}

Si le nombre n'est pas divisible par 2 il ne sera divisible par aucun des nombre multiple de 2 (les nombres pairs)
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:25:07

Voici mon code, pouvez me le corriger?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int enumber,i;
printf("Please enter the number:\n");
scanf("%d",&enumber);
for(i=enumber-1;i!=1;i--) {
if(enumber%i=0)
printf("The number is not prime");
else
printf("The number is prime");

return(0);
}
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:25:50

Citation : guigui2leretour

Oui mais la tu fais mouliner ton pc pour rien! Version optimisée:

for(i=3; i<sqrt(nombreEntre); i =+ 2)



Un appel à la fonction sqrt à chaque tour de boucle, c'est de l'anti-optimisation.
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:29:54

Attention tu ne pourra dire que ton nombre est premier que quand tu aura testé tous nombre!
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:32:36

La j'ai corrige mon programme, mais ya un serieux probleme, je rentre 12 il m'ecrit 12 fois the numbe is prime.
Vous pouvez m'aider ?
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:39:13

Citation : Marc Mongenet

Citation : guigui2leretour

Oui mais la tu fais mouliner ton pc pour rien! Version optimisée:

for(i=3; i<sqrt(nombreEntre); i =+ 2)



Un appel à la fonction sqrt à chaque tour de boucle, c'est de l'anti-optimisation.


Bien sur suis je bete xD mais il ne faut l'appeler qu'une fois! Juste avant le for il faut faire ce calcul et dans ce cas il y a une réelle optimisation!:
nombreLimite = sqrt(nombreEntre)
for(i=3; i<nombreLimite; i =+ 2)
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:41:32

Personne ne peut m'aider, je dois envoyer mon programme dans 30min et je ne comprend pas pourquoi il marche pas :/
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 1:48:43

if(enumber%i=0) 2 '==' sinon ça marche pas.
Tu as oublier un accolade.


Aussi ton code enumber-2 messages. Le mieux serait un break et un seul if. Mais le plus simple serait d'utiliser un variable qui dit si au mois un nombre est premier.
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int enumber,i,o=0;
	printf("Please enter the number:\n");
	scanf("%d",&enumber);
	for(i=enumber-1;i!=1;i--) 
		if((enumber%i)==0)
			o=1;
//[..] les if
	
	return(0);
}

Si c'est pour un devoir à rendre, y a beaucoup mieux comme solution, essaye avec le break.

Citation : guigui2leretour


nombreLimite = sqrt(nombreEntre)
for(i=3; i<nombreLimite; i =+ 2)

Evite de poster ce genre de code. Si le nombre entrer est inférieure à 9, on entre même pas dans la boucle.
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

9 mars 2011 à 1:52:48

#include <stdlib.h>
#include <math.h>
int main(void)
{
    int enumber,i,prime=1;
    printf("Please enter the number:\n");
    scanf("%d",&enumber);
    for(i=enumber-1;i!=1;i--) {
        if(enumber%i==0)
        {
         prime = 0;
         break;
         }
}
if(prime)
      printf("The number is prime");
else
        printf("The number is not  prime");
  return(0);
}

Voilà ton code mais pense à ma ptite optimisation sa fait plus économe ;)
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 2:01:21

Ahhhh en fait le break permet d'arreter la boucle une fois qu'on trouve un nombre qui divise notre nombre entré ?? Pour que la variable ne change pas de valeur apres si un autre nombre ne le divise pas ?
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 2:08:13

Exactement. :)

@ @che: mais c'est voulu! Réfléchi en dessous dessous de 9 les seul nombres non premiers sont 4,6,8 or ce sont tous des multiple de 2 et si on suis mon algo on test pour 2 avant de rentrer dans la boucle!
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 2:12:25

Oups miss dsl :/

Sinon merci tout le monde pour votre aide !
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 2:20:59

@ guigui2leretour : une petite erreur qui s'est échaper, if(enumber%i=0).


Ah a ce moment on est obliger de faire une condition en prétraitement.
  • Partager sur Facebook
  • Partager sur Twitter

🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

9 mars 2011 à 2:25:19

À oui oups ^^ je corrige

Oui mais ça divise par 2 le nombre de tour de boucle!
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 2:48:54

vaut mieux utiliser l'algorithme
de Crible d'Eratostène
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2011 à 2:54:56

Oui c'est pour ça que jai proposé la méthode avec la racine carré c'est de là que sa viens! ;)
  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2016 à 15:24:33

Bonjour, s'il vous plais expliquer moi la démarche etape par etape , j'arrive pas a comprendre. 

merci d'avance .

  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2016 à 15:49:09

La première étape lire «Règles de ce forum, à lire avant de poster».
  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
2 janvier 2017 à 19:28:53

Hey tout le monde alors voilà on me demande de créer une fonction chose que je n'ai jamais sur C. Mon code ne marche pas je ne comprends pas.

Il s'agit d'un algo qui étant donné un nombre n renvoie 1 si il est premier  0 sinon. Je ne sais pas le faire car ne je ne connais la sémantique C concernant les fonctions, svp de l'aide.

#include <stdio.h>


int main () {

  int est_premier(int n, int i) {
    printf("Entrez un nombre entier nous allons vérifier s'il est premier ou non:\n");
    scanf("%d", &n);

    for (i= n-1; i!=1; i--) {
      if (n%i == 0) {
        printf("1");;
        break;

      } else {
        printf("0");
      }

    }
    return (0);

  }
}
  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2017 à 19:33:24

PicoDev a écrit:

La première étape lire «Règles de ce forum, à lire avant de poster».


Lis bien le sujet dont j'ai déjà posté le lien. Ensuite crée ton sujet, si tu as le temps essaye de faire un petit tuto en C pour savoir comment faire.
  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
2 janvier 2017 à 19:37:20

Mon sujet est en lien avec celui ci donc je ne vois pas l'interet de faire des doubles.

Le message d'erreur est le suivant :

(.text+0x20): undefined reference to `main'

collect2: error: ld returned 1 exit status

quant à regarder un tuto ça a déjà fait. :) donc voilà je demande juste une correction ou une indication de personne plus expérimenté.

-
Edité par mdaz76. 2 janvier 2017 à 19:38:22

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2017 à 1:21:40

Mon sujet est en lien avec celui ci donc je ne vois pas l'interet de faire des doubles.

C'est pour éviter que les gens qui ouvrent la discussion ne la lisent inutilement depuis le début, comme je viens de le faire à l'instant (5 minutes de perdues !)

(Dans la nouvelle discussion qui concernera ton programme, on notera peut-être que le message d'erreur suggère (il me semble) un problème à la compilation. Tu utilises quel compilateur ? Avec un IDE ou en ligne de commande ? Tu as déjà réussi à compiler des programmes ? Mais bon, on verra tout ça dans la discussion adaptée.)

  • Partager sur Facebook
  • Partager sur Twitter
2 décembre 2017 à 21:30:58

:euh:

-
Edité par TakwaAoun 2 décembre 2017 à 21:34:50

  • Partager sur Facebook
  • Partager sur Twitter