IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

projet nombres premiers


Sujet :

Langage Java

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut projet nombres premiers
    bonjour !

    j' ai dans un projet, 7 fonctions à créer. J' en ai créé 4. La 5ème me crée un sérieux problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
     
    //MINI PROJET NOMBRES PREMIERS
     
    public class ProjetNombresEntiers
    {
     
    		public static void main (String [] args )
    		{
    			afficheNpremiers(12);
    		}
    		//un nombre entier p divise un nombre entier q si le reste de la division entiere de p par q est zero.
     
     
     
    		//a)écrire  une fonction booléene qui, etant donnés deux entier strictement positif p et q, test si p divise q.
    		public static boolean divise (int p, int q) // la fonction est booléenne, d' où le type boolean de la fonction que j' ai appelé divise
    		{
    			boolean verite = false; // création de la variable booléenne (verite) qui sera retournée puis son initialisation à false
     
    			if(p%q == 0) // si p modulo q (reste de la division de p par q) est égale à zéro
    			{
    				verite = true; // alors la variable booléenn est vrai. Car dans ce cas, p divise q
    			}
     
    			else // sinon,
    			{
    				verite = false; // c' est faux, d' où false
    			}
     
    			return verite; // retouner la variable booléenne
    		}
     
    		// b) Ecrire une fonction qui, etant donné un entier p, rend le nombre de diviseur de p. exemple:12 a 6 diviseur:1,2,3,4,6,12
    		public static int nombreDiviseurs(int p)
    		{
    			int nbreDiv = 2; //Parce qu' un nombre entier a forcément au moins 2 diviseurs. Sauf le nombre 1. D' où la ligne suivante.
     
    			if (p == 1) // Donc, dans le cas où p = 1
    			{
    				nbreDiv = 1; // nombre de diviseurs = 1. Evidement !
    			}
     
    			else // Autrement (si p différent de 1)
    			{
    				// on parcours tous les nombres de 2 à un nombre inférieur à p (parce que 1 et p sont déjà comptés ((voir première ligne int nbreDiv = 2;)
    				for (int i = 2; i < p; i++) 
    				{
    					if(p % i == 0) // si un de ces nombres est un diviseur de p
    					nbreDiv++; // alors, augmenter de 1 le nombre de ces diviseurs
    				}
    			}
     
    			return nbreDiv; //  retourner (ou rendre) le nombre de diviseurs trouvés.
    		}
     
    		// c)  Un nombre est premier s'il n'est divisible que par 1 et par lui meme. exemple:13 est premier ,21 ne l'est pas. 	
    		// Ecrire  une fonction isPremier en utilisant la fonction de b.
    		public static boolean isPremier(int p)
    		{
    			boolean verite = false; // création de la dariable booleenne
     
    			// La fonction b) donne le nombre de diviseurs d' un entier p
    			if(nombreDiviseurs(p) == 2) // Si cenombre est inférieur ou égal à 2
    			{
    				verite = true; // alors, ce nombre est premier
    			}
    			else // autrement,
    			{
    				verite = false; // ne nombre n' est pas premier
    			}
     
    			return verite; // retourner la booléenne, évidement
    		}
     
    		// d. En fait, si l'on trouve un diviseur pour un nombre p qui est différent de 1 et de p, on peut en déduire immédiatement que p n'est pas premier.
    		// Ecrire une fonction isPremier utilisant cette propriété.
    		public static boolean isPremier2(int p)
    		{
    			boolean verite = false; // création de la dariable booleenne
     
    			if(p == 1)
    			{
    				verite = false; //Car 1 n' est pas un nombre premier
    			}
    			else // autrement
    			{
    				for(int i = 2; i < p; i++) // de tous les nombres compris entre 2 et un nombre inférieur à p
    				{
    					if(p % i == 0) // si p divise un de ces nombres
    					{
    						verite = false; // alors p n' est pas premier car p est premier seulement s' il divise 1 et lui même
    						break; // sortir de la boucle car on a déjà trouvé un diviseur différend de 1 et de p 
    					}
    					else
    					verite = true;
    				}
    			}
    				return verite; // retourner la booléenne, évidement
    		}
     
    		//e.  Améliorer en ne considérant comme diviseurs que le nombre 2 et les nombres impairs (en effet si un nombre n'est pas divisible par 2, il ne sera divisible     
    		// par aucun nombre pairs !)
     
    		public static boolean isPremier3(int p)
    		{
    			boolean verite = false; // création de la dariable booleenne
     
    			if(p == 1)
    			verite = false;
     
    			if(p == 2)
    			verite = true;
     
    			int reste = (p % 2); // la variable reste = reste de la division de p par 2
     
    			switch(reste)
    			{
    				case 0: // au cas où ce reste = 0, p est  divisible par 2 
    				verite = false; // p ne peut donc plus être premier
    				break;
     
    				default:// dans l' autre cas (forcément reste = 1) p n' est pas divisible par 2
    				for(int i = 2; i < p;  i++)
    				{
    					if(i % 2 == 0) // si i est un multiple de 2
    					continue; // ne pas en tenir compte. Donc continuer à la valeur suivante. Car p n' est pas divisible par tous les multiples de 2
     
    					if(p % i != 0) // 
    					verite = true;
    					else
    					verite = false;
    				}
    				break;
    			}	
     
    			return verite;
     
     
     
    		}
     
     
     
     
     
     
     
     
     
     
    }
    /*
    MINI PROJET NOMBRES PREMIERS
     
       Un nombre entier p divise un nombre entier q si le reste de la division entière de p par q est zéro.
     
       a. Ecrire une fonction boolenne qui, étant donnés deux entiers strictement positifs p et q, teste si p divise q.
     
       b. Ecrire une fonction qui, étant donné un entier p, rend le nombre de diviseurs de p.
       exemple : 12 à  6 diviseurs : 1,2,3,4,6,12
     
       c.Un nombre est premier s'il n'est divisible que par 1 et par lui-même.
       exemple : 13 est premier , 21 ne l'est pas.
     
       Ecrire la fonction isPremier en utilisant la fonction de b.
     
       d. En fait, si l'on trouve un diviseur pour un nombre p qui est différent de 1 et de p, on peut en déduire immédiatement que p n'est pas premier.
       Ecrire une fonction isPremier utilisant cette propriété.
     
       e.  Améliorer en ne considérant comme diviseurs que le nombre 2 et les nombres impairs (en effet si un nombre n'est pas divisible par 2, il ne sera divisible     
       par aucun nombre pairs !)
     
       f.  Améliorer en arretant les tests lorsque le diviseur dépasse la racine carrée de n. (en effet, si un diviseur de p est supérieur à la racine carrée de n, le quotient est donc inférieur à n et aura été trouvé avant).
     
       g. Ecrire une fonction affichant la liste des n premiers nombres premiers inférieurs à partir de 2..
     
    */
    si vous pouviez m' aider sur cette 5ème fonction au moins. (e)...

    merci d' avance
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut correction
    erreur !

    supprimer la ligne dans la fonction main().

    j' avais tenté d' écrire la 7ème fonction (g) sans passer par les 5ème et 6ème.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Salut,

    Déjà :
    Citation Envoyé par raph707
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    //MINI PROJET NOMBRES PREMIERS
     
    public class ProjetNombresEntiers
    {		
    		//e.  Améliorer en ne considérant comme diviseurs que le nombre 2 et les nombres impairs (en effet si un nombre n'est pas divisible par 2, il ne sera divisible     
    		// par aucun nombre pairs !)
     
    		public static boolean isPremier3(int p)
    		{
    // ...
    			int reste = (p % 2); // la variable reste = reste de la division de p par 2
     
    			switch(reste)
    			{
    				case 0: // au cas où ce reste = 0, p est  divisible par 2 
     // ...
    Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(reste == 0) {
    } else {
    }
    serait plus approprié à la place du switch.

    Ensuite Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 2; i < p;  i++)
    Tu peut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 2; i < p;  i = i +2)
    ça t'éviteras de tester la parité de i

    Pour finir voici le code qui devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public static boolean isPremier3(int p) {
    		boolean verite = true; // initialisée à true ainsi si toute la boucle
    		// suivante est parcourue, c'est que le nombre
    		// est premier
     
    		if (p == 1) {
    			verite = false;
    		} else if (p == 2) {
    			verite = true;
    		} else {
    			int reste = (p % 2); // la variable reste = reste de la division
    			// de p par 2
     
    			if (reste != 0) {
    				for (int i = 3; i < p; i = i + 2) {
    					if (p % i == 0) {
    						verite = false;
    						// On s'arrete dès qu'on se rend compte que le nombre
    						// n'est pas premier
    						break;
    					}
    				}
    			} else {
    				verite = false;
    			}
     
    		}
    		return verite;
    	}
    Je ne l'ai pas testé (donc il peut y avoir des bourdes). Si tu ne comprends pas ce que j'ai changé n'hésites pas à me demander.

    EDIT : J'ai testé et corrigé le code il fonctionne

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Merci, merci et merci.

    La seule chose qu' il me fallait, c' était comment parcourir que les nombres impairs.

    Maintenant, ça ira. J' aurai dû penser à i = i + 2.

    Merci encore

  5. #5
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    un petit résolu alors?
    "Le calendrier, c'est la bureaucratie du temps." Quino

  6. #6
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 38
    Points : 38
    Points
    38
    Par défaut
    J'ai fait un autre code que Gailuris, je n'ai pas testé non plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static boolean isPremier3(int p) {
        if(p == 1)
            return false;
        if(p == 2)
            return true;
        if(!(p % 2)) {
            return false;
        }
        else {
            for(int i = 2; i < p;  i++) {
                if(!(i % 2 == 0)) {// si i est impaire
                    if(p % i == 0)
                        return false;
                    }
            }
        }
        return true;
    }

    Quelques petits conseils,

    -ne créé pas de booleen sauf si tu en a une réelle utilité fait plutot un return true ou false qui évite de continuer les traitements--> plus optimisé

    -Comme gailuris l'a déjà dit évite les switch case dans un cas comme celui ci, tu n'as pas assez de possibilités, if ... else ... et beaucoup plus simple et lisible.

    -Une fonction récursive serait plus appropiée pour régler le problème des nombres premiers, (bizarre ton tp)

    voila a+

    Fk

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par STB_Fk
    -ne créé pas de booleen sauf si tu en a une réelle utilité fait plutot un return true ou false qui évite de continuer les traitements--> plus optimisé
    C'est un peu philosophique, mais je ne suis pas trop d'accord, l'idéal pour moi, serait un while(...) qui fairait la meme chose que le for(...) et testerait aussi le booleen de retour : ainsi ça évite de faire du traitement pour rien et ça évite d'avoir plusieur return dans la meme méthode (un point d'entrée et un point de sortie).
    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            int i = 2;
            while(i < p && verite) {
                i = i + 2;
                // ...
            }
    Citation Envoyé par STB_Fk
    -Une fonction récursive serait plus appropiée pour régler le problème des nombres premiers, (bizarre ton tp)
    La c'est clair, mais je pense que ce tp a pour seul but de pratiquer avec des exemples simples (enfin j'éspère )


    PS. : Un petit serait approprié non ?

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    On peut s'arreter a (p/2) lorsqu'on recherche les diviseurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 3; i <= (p/2); i = i + 2) { ... }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par pseudocode
    On peut s'arreter a (p/2) lorsqu'on recherche les diviseurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 3; i <= (p/2); i = i + 2) { ... }
    On peut même faire mieux en s'arrêtant à racine carrée de p

  10. #10
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut nombres premiers incompris
    voici un mini projet sur les nombres entiers
    MINI PROJET NOMBRES PREMIERS

    Un nombre entier p divise un nombre entier q si le reste de la division entière de p par q est zéro.

    a. Ecrire une fonction boolenne qui, étant donnés deux entiers strictement positifs p et q, teste si p divise q.

    b. Ecrire une fonction qui, étant donné un entier p, rend le nombre de diviseurs de p.
    exemple : 12 à 6 diviseurs : 1,2,3,4,6,12

    c.Un nombre est premier s'il n'est divisible que par 1 et par lui-même.
    exemple : 13 est premier , 21 ne l'est pas.

    Ecrire la fonction isPremier en utilisant la fonction de b.

    d. En fait, si l'on trouve un diviseur pour un nombre p qui est différent de 1 et de p, on peut en déduire immédiatement que p n'est pas premier.
    Ecrire une fonction isPremier utilisant cette propriété.

    e. Améliorer en ne considérant comme diviseurs que le nombre 2 et les nombres impairs (en effet si un nombre n'est pas divisible par 2, il ne sera divisible
    par aucun nombre pairs !)

    f. Améliorer en arretant les tests lorsque le diviseur dépasse la racine carrée de n. (en effet, si un diviseur de p est supérieur à la racine carrée de n, le quotient est donc inférieur à n et aura été trouvé avant).

    g. Ecrire une fonction affichant la liste des n premiers nombres premiers inférieurs à partir de 2..
    J' ai terminé les question de a) à e)

    Comprends pas la question f).
    Quelqu' un peut-il m' expliquer ?

    Merci d' avance !

  11. #11
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Demande à ton enseignant
    "Le calendrier, c'est la bureaucratie du temps." Quino

  12. #12
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    très amusant !

  13. #13
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Ben comment veux tu qu'on comprenne cet énoncé nous aussi ?

    g. Ecrire une fonction affichant la liste des n premiers nombres premiers inférieurs à partir de 2.
    Moi perso ça évoque rien pour moi

    edit : j'avais pas vu que c'était la question f désolé.

    Ben regarde ce que disait bigben99 plus haut :

    Citation Envoyé par bigben99
    On peut même faire mieux en s'arrêtant à racine carrée de p
    "Le calendrier, c'est la bureaucratie du temps." Quino

  14. #14
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Je demande à comprendre la question f). Pas la question g

    pour g, erreur : faut enlever le mot inférieurs

  15. #15
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i = 3; i <= (p/2); i = i + 2) { ... }
    Au lieu de faire p/2, tu fais racine carré de p. Voilà ce que veut dire la question. Tu peux donc améliorer ta condition d'arrêt de la boucle.

    Cf toujours le post de bigben99 au-dessus.

    edit : allez je te mets le bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i = 3; i <= (Math.sqrt(p)); i = i + 2) { ... }
    De plus,
    La classe java.lang.Math contient une série de méthodes et variables mathématiques. Comme la classe Math fait partie du package java.lang, elle est automatiquement importée. de plus, il n'est pas nécessaire de déclarer un objet de type Math car les méthodes sont toutes static
    "Le calendrier, c'est la bureaucratie du temps." Quino

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par raph707
    Comprends pas la question f).
    Quelqu' un peut-il m' expliquer ?

    Merci d' avance !
    Ca fait une eternité que je n'ai pas fait de démonstration mathématique mais je vais essayer de t'expliquer avec des exemples pourquoi tu peux t'arrêter à la racine carré pour ta recherche de diviseur.

    Pour vérifier la primalité de 21...
    Tu vas faire :
    21/2 => q = 10, r = 1, r <> 0 donc 2 n'est pas un diviseur de 21
    21/3 => q = 7, r = 0, r = 0, donc 3 divise 21 mais grace à ce résultat tu sais aussi que 7 divise 21.
    au final tu trouves que les diviseurs de 21 sont 1, 3, 7 et 21 donc 21 n'est pas premier.

    même chose avec 23 :
    23/2 => q = 11, r = 1, r <> 0 donc 2 n'est pas un diviseur de 21
    23/3 => q = 7, r = 2, r <> 0 donc 3 n'est pas un diviseur de 21
    ca n'est pas la peine de tester 23/5 car si 23 est divisible par 5, alors 5 * q devra te donner 23, or pour que 5 * q = 23, il faut que q soit inférieur à 23/5 (4,6) or tu sais qu'il n'existe pas de diviseur de 23 inférieur à 5 puisque tu les à déjà tous essayé.

    J'espère que mes explications t'ont éclairées.

  17. #17
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par bigben99
    Ca fait une eternité que je n'ai pas fait de démonstration mathématique mais je vais essayer de t'expliquer avec des exemples pourquoi tu peux t'arrêter à la racine carré pour ta recherche de diviseur.

    Pour vérifier la primalité de 21...
    Tu vas faire :
    21/2 => q = 10, r = 1, r <> 0 donc 2 n'est pas un diviseur de 21
    21/3 => q = 7, r = 0, r = 0, donc 3 divise 21 mais grace à ce résultat tu sais aussi que 7 divise 21.
    au final tu trouves que les diviseurs de 21 sont 1, 3, 7 et 21 donc 21 n'est pas premier.

    même chose avec 23 :
    23/2 => q = 11, r = 1, r <> 0 donc 2 n'est pas un diviseur de 21
    23/3 => q = 7, r = 2, r <> 0 donc 3 n'est pas un diviseur de 21
    ca n'est pas la peine de tester 23/5 car si 23 est divisible par 5, alors 5 * q devra te donner 23, or pour que 5 * q = 23, il faut que q soit inférieur à 23/5 (4,6) or tu sais qu'il n'existe pas de diviseur de 23 inférieur à 5 puisque tu les à déjà tous essayé.

    J'espère que mes explications t'ont éclairées.

    Nein !

    Tu parles de 23 dans ton deuxième exemple. Mais tu y parles encore de 21.

    De toutes façons, les explications ne me paraissent pas claires.

  18. #18
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Citation Envoyé par raph707
    Nein !

    Tu parles de 23 dans ton deuxième exemple. Mais tu y parles encore de 21.

    De toutes façons, les explications ne me paraissent pas claires.
    Il voulait dire 23 dans son 2ème exemple, juste une erreur de saisie.

    Quant aux explications qui paraissent pas claires, je péfère ne rien dire. Un merci au lieu de se plaindre aurait été judicieux surtout qu'ici c'est plus un problème de mathématiques que de java. Il prend le temps d'essayer de t'expliquer des maths donc faudrait voir à pas pousser mémé dans les horties
    "Le calendrier, c'est la bureaucratie du temps." Quino

  19. #19
    Membre habitué Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Points : 178
    Points
    178
    Par défaut
    Soit A le nombre dont on cherche les diviseurs.
    Si on trouve un diviseur p, alors il existe q tel que p*q = A.
    Pour rechercher p, parcourons tous les nombres jusqu'a tomber sur le premier diviseur qui est le plus petit. On en trouve 1. alors on deduit q car q = A/p, et comme p est le plus petit, q est le plus grand.
    Maintenant, trouvons la limite max de p. La limite max, c'est quand le plus grand et le plus petit sont égaux, à savoir p = q, avec la condition p*q = A.
    Donc on a pmax * pmax = A => pmax = sqrt(A).
    On est sur que si on n'a pas trouvé de diviseur inférieur sqrt(A), alors A est premier.
    CQFD.
    Tout le monde savait que c'était impossible à faire. Puis un jour quelqu'un est arrivé qui ne le savait pas, et il le fit (Winston Churchill)

  20. #20
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par sironimo
    Il voulait dire 23 dans son 2ème exemple, juste une erreur de saisie.

    Quant aux explications qui paraissent pas claires, je péfère ne rien dire. Un merci au lieu de se plaindre aurait été judicieux surtout qu'ici c'est plus un problème de mathématiques que de java. Il prend le temps d'essayer de t'expliquer des maths donc faudrait voir à pas pousser mémé dans les horties
    On dit merci quand on a reçu de l' aide. Je n' ai rien compris à ce qu' il a dit. Donc, je n' ai reçu aucune aide. Et donc, je ne vois pas le pourquoi du merci.

    Et quand je poste une demande d' aide, je dis toujours merci d' avance. Avant toute réponse. Regarde le premier message.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  2. [défi n°8]: premiers nombres premiers
    Par javatwister dans le forum Général JavaScript
    Réponses: 41
    Dernier message: 14/06/2005, 10h22
  3. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  4. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10
  5. premier nombre premier superieur à m=10^100+1
    Par azman0101 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 17/04/2003, 03h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo