Partage
  • Partager sur Facebook
  • Partager sur Twitter

teste de primalité

boucle

Sujet résolu
Anonyme
    30 octobre 2019 à 13:20:51

    Bonjour, je bloque sur une partie de code

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int premier, reste, i;
    
    	printf("Rentrez un nombre : ");
    	scanf_s("%d", &premier);
    
    	reste = -1;
    	i = 2;
    
    	while (i < premier && reste != 0)
    	{
    		reste = premier % i;
    		i++;
    	}
    	if (reste == 0)
    		printf("Ceci n'est pas un nombre premier. Diviseur: %i\n", i - 1);
    	else
    		printf("Ceci est un nombre premier\n");
    
    	return 0;
    }



    j'aimerai savoir pourquoi nous devons mettre reste= -1 et i=2 ? 

    Avez vous aussi un meilleur code à me proposer que celui là ? 

    merci 

    • Partager sur Facebook
    • Partager sur Twitter
      30 octobre 2019 à 13:30:07

      Bonjour ! Afin d'aller au moins une fois dans la boucle, il faut donner à 'reste' une valeur autre que 0. Par exemple -1. Ensuite on initialise à 2 parce qu'on cherche des diviseurs autres que 1 et le nombre de départ (notons-le N), donc i doit aller de 2 à N-1.

      Une autre façon de procéder serait d'utiliser une boucle for : 'i' va de 2 à N-1, et on sort de la boucle (avec l'instruction 'break') dès qu'on a rencontré un diviseur. Mais ça me paraît aussi bien comme tu l'as fait.

      Après, il y a des méthodes pour optimiser, par exemple ne tester que les diviseurs premiers, ou du moins impairs, et s'arrêter à la racine carrée de N (qu'il faut ne pas calculer). Vaste sujet...

      -
      Edité par robun 30 octobre 2019 à 13:33:00

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        30 octobre 2019 à 22:06:37

        salut

        une petite remarque, ton code dit que 0 et 1 sont premiers, à part ça, il marche bien. Essaie de l'améliorer

        -
        Edité par Anonyme 31 octobre 2019 à 0:02:28

        • Partager sur Facebook
        • Partager sur Twitter

        teste de primalité

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown