TD I- Algorithmique
les cas suivants. Exercice 1 : Cherchez l'erreur. Que se passe-t-il avec l'algorithme suivant : Variable Note : numérique. Lire (Note). Selon Que.
ALGORITHME SECONDE Exercice 5.1 Ecrire un algorithme qui
Exercice 5.5. Ecrire un algorithme qui demande un nombre de départ et qui ensuite écrit la table de multiplication de ce nombre
Diapositive 1
15 févr. 2013 EXERCICES ALGORITHME 1 ... Ecrire le même algorithme avec des selon-que : ... (2 cas). ?Pour chaque cas: comparer m1 et m2 ! (2 cas).
Exercices corrigés
Écrire l'algorithme du calcul de : m3 = m1?m2 . ! BC v2.1. - 11 -.
Algorithmique - Correction du TD2
5 oct. 2012 Exercice 1. Construire un arbre de décision et l'algorithme correspondant permettant de déterminer la catégorie sportive d'un enfant selon ...
Algorithmique et structures de données I
Exercice 1. Écrire un algorithme qui demande deux nombres `a l'utilisateur et l'informe ensuite si leur produit est négatif ou positif (on laisse de côté le
Exercices avec Solutions
détaillées aux exercices proposés mais il ne doit en aucun cas remplacer Ecrire un algorithme qui demande un nombre à l'utilisateur
Exercice 4 : nombre premier
Selon cas choix_joueur = 1 : // Pierre. Selon cas choix_ordinateur = 1 : // Pierre. Ecrire « (vous) pierre
ALGO 1.1 œ Correction TD N°3.
Exercice 1. si année mod 4 = 0 alors // Cas d'une année bissextile ... si mois < 12 alors // Cas d'un mois différent de décembre.
Analyse Numérique
Exercice 1.1 En écrivant un petit programme trouver la capacité et le pas Dans le cas de l'algorithme de la sécante ci-dessus
[PDF] exercices corrigés algorithmepdf - fustel-yaoundenet
Exercice 5 5 Ecrire un algorithme qui demande un nombre de départ et qui ensuite écrit la table de multiplication de ce nombre présentée comme suit (cas où l
[PDF] Exercices avec Solutions
Dans cet ouvrage je donne des solutions détaillées aux exercices proposés mais il ne doit en aucun cas remplacer les séances de TD où les
[PDF] TD-Algorithmique (Exercices corrigés)pdf
Exercice 1 : Écrire un algorithme qui détermine le numéro d'un jour dans l'année en fonction cas 9 : numj ? 31 + 28+31+30+31+30+31+31+j ; sortie ;
[PDF] Structure conditionnelle à choix multiples - TD I- Algorithmique
les cas suivants Exercice 1 : Cherchez l'erreur Que se passe-t-il avec l'algorithme suivant : Variable Note : numérique Lire (Note) Selon Que
[PDF] Algorithmique et programmation : les bases (Algo) Corrigé - F2School
Exercice 1 : Lien entre raffinage et algorithme Donner le raffinage qui a conduit à l'algorithme décrit dans le listing 1 Solution :
ALGORITHMIQUE 83 ExerciceS corrigés By ExoSup - Academiaedu
Exercice 2 4 Ecrire un algorithme utilisant des variables de type chaîne de dans un cas on privilégie la lisibilité de l'algorithme dans l'autre
[PDF] Algorithme 2 - Fiche 5 : Exercices sur linstruction SI SINON
a) Écrire un algorithme qui : - demande à l'utilisateur deux nombres différents - et lui donne le plus grand des deux b) Même exercice avec trois nombres
[PDF] Algorithme - Exercices
Exercice 7 • On dispose de trois variables A B et C Ecrivez un algorithme transférant à B la valeur de A à C la valeur de B et à A la valeur de C
Les exercices en algorithme - Coode Maroc
28 mai 2021 · Exercice 13 Écrire un algorithme permettant d'afficher le mois en lettre selon le numéro saisi au clavier ( Si l'utilisateur tape 1 le
[PDF] Conception dalgorithmes Principes et 150 exercices non corrigés
La pensée algorithmique est l'ensemble des processus mentaux permettant de formuler les problèmes et leurs solutions dans une forme qui rend possible la
IUT Arles- Info
1ère
année - Matière AP (Module Algorithmique)TD 9 Algorithmique
Révisions Exercice 1 : Jeu de pierre-papier-ciseaux Ecrire un algorithme permettant de jouer au jeu pierre-papier-ciseaux contre l'ordinateur. L'utilisateur et l'ordinateur ont trois coups possibles : pierre, papier ou ciseaux. Les règles sont les suivantes : les deux joueurs jouent la même chose : pas de pointPierre contre Papier : Papier gagne (et marque 1 point) Pierre contre Ciseaux : Pierre gagne (et marque 1 point)
Ciseaux contre Papier : Ciseaux gagne (et marque 1 point) L'utilisateur entre 1, 2 ou 3 et l'ordinateur tire un nombre aléatoire compris entre 1 et 3. On affiche à chaque fois le coup correspondant au nombre choisi par chaque joueur (1=pierre,2=papier, 3=ciseaux) ainsi que le gagnant. La partie est remportée par le premier à atteindre 10 points.
On utilisera la fonction aléatoire pour obtenir une valeur aléatoire :Fonction Aléatoire (entier nb) : entier, Renvoie une valeur tirée aléatoirement entre 0 et Nb.
Par exemple, si Nb ĸ 5, Aléatoire renvoie un résultat compris entre 0 et 5. Exemple de programme
Variable Nb, Resultat : numérique
Nb ĸ 12
Résultat ĸ Aléatoire (Nb)
Ecrire Résultat
Variable choix_joueur, choix_ordinateur, score_joueur, score_ordinateur, score_max : numériques score_max ĸ 10 score_joueur ĸ 0 score_ordinateur ĸ 0; repéterEcrire " 1 : Pierre" »
Ecrire " 2 : Papier »
Ecrire " 3 : Ciseaux » Ecrire " Votre choix : »Lire choix_joueur
choix_ordinateur = 1+ Aléatoire(2)Selon cas
choix_joueur = 1 : // PierreSelon cas
choix_ordinateur = 1 : // Pierre Ecrire " (vous) pierre | pierre (ordinateur) »Ecrire " Coup nul »
choix_ordinateur = 2 : // Papier Ecrire " (vous) pierre | papier (ordinateur) »Ecrire " L'ordinateur gagne »
score_ordinateur = score_ordinateur + 1 choix_ordinateur = 3 : // Ciseaux Ecrire " (vous) pierre | ciseaux (ordinateur) »Ecrire "Vous gagnez" »
score_joueur = score_joueur + 1;Fin Selon
choix_joueur = 2: // PapierSelon cas
choix_ordinateur = 1 : // PierreEcrire " (vous) papier | pierre (ordinateur) »
Ecrire " Vous gagnez »
score_joueur = score_joueur + 1; choix_ordinateur = 2 : // Papier Ecrire " (vous) papier | papier (ordinateur)") »Ecrire " Coup nul »
Choix_ordinateur = 3 :
// Ciseaux Ecrire " (vous) papier | ciseaux (ordinateur) »Ecrire " L'ordinateur gagne »
score_ordinateur = score_ordinateur + 1;Fin selon
choix_joueur = 3 : // CiseauxSelon cas
choix_ordinateur = 1 : // Pierre Ecrire " (vous) ciseaux | pierre (ordinateur) »Ecrire " L'ordinateur gagne »
score_ordinateur = score_ordinateur + 1; choix_ordinateur = 2 : // Papier Ecrire " (vous) ciseaux | papier (ordinateur) »Ecrire " Vous gagnez »
score_joueur = score_joueur + 1; choix_ordinateur = 3 : // Ciseaux Ecrire " (vous) ciseaux | ciseaux (ordinateur) »Ecrire " Coup nul »
Fin selon
SinonEcrire " Ce n'est pas un choix valable. »
Fin Selon
Ecrire " Joueur: ", score_joueur, " | Ordinateur : ",score_ordinateur Tant que (score_joueurEcrire " Vous avez perdu la partie !!! »
Il est aussi possible de ne tester que l'égalité et les cas gagnants, le reste amenant à la perte de la manche Exercice II : Ecrire une fonction dont le résultat, booléen, indique si un nombre entier est premier ou non. Pour cela, essayer de diviser le nombre par tous ceux qui lui sont inférieurs, puis seulement par ceux qui sont nécessaires. Remarque : On doit créer une fonction Modulo. On peut pour cela utiliser la condition (n/d)*d=n pour tester si d divise n.1- créer la fonction Modulo (ĺa : entier, ĺ b entier) : entier qui renvoie le reste de la
division de a par b. Vous pouvez utiliser l'opération division entière.2- Créer les versions successives suivantes de la fonction Premier
a. Version 1 : on essaie les divisions par 2, 3, ..., n-1 b.Version 2 : On s'arrête au premier diviseur
c. Version 3 : On s'arrête au premier diviseur ou à n d. Version 4 : On pense à ne pas essayer 4, 6, 8, ... e. (en Option) : Version 5 : On pense à ne pas essayer les multiples de 2, ni de 3. On essaie donc seulement 2, 3, 5, 7, 11, 13, 17, 19, 23, 25, ... Soit 2, 3 puis des nombres de la forme 6 x k - 1 et 6 x k + 1. On passe de 6 x k - 1 à 6 x k +1 en ajoutant 2, puis de 6 x k + 1 à 6 x (k+1) - 1 en ajoutant 4. f. Version 6 (en option) : Pour accélérer encore la recherche, on n'essaie que les diviseurs premiers, stockés à l'avance, dans un tableau TabPrem qui contient donc les NombreD nombres premiers inférieurs à la racine carrée de Maxint. // Si l'on ne dispose pas de l'opérateur modulo, on commence pa r créer une fonction Modulo. Cette fonction renvoie le reste s'il existe. Elle renvoie -1 en cas d'erreur. fonction Modulo (ĺa : entier, ĺ b entier) : entier variable q : entierDébut
Si b = 0 alors
Résultat -1
Sinon q ĸ a / b // division entière // on est sur de ne jamais l'appeler avec b = 0, // sinon on renvoie une erreurRésultat a - b * q
Fsi Fin a = b * q + r ; donc pour avoir le reste il suffit de faire a - b * q Version 1 : on essaie les divisions par 2, 3, ..., n-1Fonction Premier (ĺn : entier) : booleen
Variables Prem : booleen
Variable d : entier
Début
Prem ĸ Vrai
Répéter pour d=2 à n-1
Si Modulo(n, d) = 0 alors
Prem ĸ Faux
FsiFinPour
Resultat Prem
Fin // Version 2 : On s'arrête au premier diviseur dĸ 2
Prem ĸ Vrai
Tant que (Prem = Vrai et d < n ) faire
Si Modulo (n,d)=0 alors
Prem ĸ Faux
Sinon d ĸ d +1 FsiFinTantQue
// Version 3 : On s'arrête au premier diviseur ou à n dmax ĸ PartieEntière(RacineCarrée(n)) // pour ne pas recalculer n dĸ 2
Premĸ Vrai
Tant que (Prem = Vrai et d < dmax) faire
Si Modulo(n,d) = 0 alors
Prem ĸ Faux
Sinon d ĸ d + 1 FsiFinTantQue
// Version 4 : On pense à ne pas essayer 4, 6, 8, ... dmax ĸ PartieEntiere(RacineCarrée(n)) // pour ne pas recalculer nSi Modulo (n,2) = 0 alors
Prem ĸ Faux
SinonPrem ĸ Vrai
Fsi dĸ 3
Tant Que Prem = Vrai et d Si Modulo(n,d)=0 alors
Prem ĸ Faux
Sinon d ĸ d + 2 Fsi Fin Tant Que
// Version 5 : On pense à ne pas essayer les multiples de 2, ni de 3 // On essaie donc seulement 2, 3, 5, 7, 11, 13, 17, 19, 23, 25, ... // Soit 2, 3 puis des nombres de la forme 6 x k - 1 et 6 x k + 1 // On passe de 6 x k - 1 à 6 x k +1 en ajoutant 2 // puis de 6 x k + 1 à 6 x (k+1) - 1 en ajoutant 4 dmax ĸ PartieEntiere(RacineCarrée(n))
d ĸ 5
Pas ĸ 2
Si (Modulo (n, 2) =0 ou Modulo(n,3) = 0) alors
Prem ĸ Faux
Sinon Prem ĸ Vrai
Fsi Tant Que (Prem = Vrai) et (d Si Modulo(n,d)=0 alors
Prem ĸ Faux
Sinon d ĸ d + pas pas ĸ 6 - pas Fsi Fin Tant Que
On n'élimine pas, parmi les diviseurs à essayer, les multiples de 7, de 11, ..., de manière analogue, car le gain sur les calculs ne compense pa s la complication apportée à l'algo. Version 6 : Pour accélérer encore la recherche, on n'essaie que les diviseurs premiers, stockés à l'avance, dans un tableau TabPrem qui contient donc les NombreD nombres premiers inférieurs à la racine carrée de Maxint.
d ĸ 1
Prem ĸ Vrai
Tant Que (Prem= Vrai et d <= NombreD) faire
Si Modulo (n, TabPrem[d])=0 alors
Prem ĸ Faux
Sinon d ĸ d+1 Fsi FinTantQue
Exercice III : Afficher la décomposition d'un nombre en produit facteurs premiers. Méthode : Si le nombre n admet le facteur premier p, il s'écrit n = p x m, il suffit alors d'écrire p , puis de recommencer avec m. Variables N, d : entier
Ecrire(" Nombre à décomposer ? »)
Lire (N)
d 2 // diviseur premier à essayer
Tant Que N > 1 faire
Si Modulo (N, d) = 0 alors
Ecrire (d)
N ĸ N / d
Sinon d ĸ d + 1 Fsi FinTantQue
Pour bien comprendre cet algorithme, il faut remarquer que lorsque d n' est pas un nombre premier, N n'est pas divisible par d car on a déjà divisé N par les facteurs premiers de d. On peut éviter d'essayer tous les entiers à partir de 2, mais c ela complique l'algorithme : on commencera par extraire tous les deux, pu is, dans une seconde boucle, les autres facteurs premiers à, partir de 3, essayant successivement 3, 5, 7, etc, ... Exemple : a= 50 et b= 25
Donc d prend la valeur 25
Exercice IV : Ecrire la fonction pgcd, dont le résultat est le plus grand commun diviseur des deux nombres fournis en paramètres. Une première idée consiste à essayer, en descendant, tous les pgcd éventuels jusqu'à atteindre un diviseur commun aux deux nombres. Plus efficace est l'algorithme d'Euclide, basé sur la propriété pgcd(a,b) = pgcd (b, a modulo b),
pour a et b > 0. Dans la première méthode, le mieux est d'initialiser le diviseu r commun éventuel au plus petit des deux nombres (supposés tous les deux > 0), car
le PGCD lui est inférieur au égal. On n'a pas à s'inquié ter de l'arrêt de la boucle : au pire elle s'arrêtera pour d = 1 ( a et b premiers entre eux). Exemple pgcd(27,9) on trouve 9
Pgcd (25, 10) : On trouve 5
Fonction PGCD(ĺa : entier, ĺ b : entier) : entier Variable d : entier
Début
Si (a < b) alors
d ĸ a Sinon d ĸ b Fsi Tant que (non(modulo(a,d)=0) et modulo (b, d)=0) faire d ĸ d -1 Fin Tant Que
Résultat d
Fin Deuxième méthode : Avec l'algorithme d'Euclide Fonction PGCDEuclide(ĺa : entier, ĺ b : entier) : entier Variable r : entier // reste de la division de a par b Début
Tant que (b>0) faire
r ĸ modulo(a,b) a ĸ b b ĸ r Fin Tant Que
Résultat a
Fin Le résultat est le dernier reste non nul. Soit p le pgcd de a et b, i l est obtenu dans une exécution de la boucle qui calcule r ĸp, aĸb et b ĸp. On a alors encore b>0, donc une nouvelle exécution de la boucle est effe ctuée rĸ0, a ĸp, bĸ0 : la boucle s'arrête enfin, mais p est dans a. Contrairement à une idée répandue, il n'est pas nécessair e, lorsque a < b, de procéder à l'échange de leurs valeurs, avant la boucle. E n effet, si a < b , la boucle effectue les affectations suivantes : r ĸ a (car a < b, a modulo b = a), puis a ĸ b, enfin b ĸ r, ce qui échange a et b. Exercice V : Ecrire la fonction ppcm, en utilisant la fonction pgcd (rappel pgcd(a,b) * ppcm (a,b) = a x b). Exercice VI :
La conjecture de Goldbach veut que tout nombre pair strictement supérieur à 2 soit la somme de deux nombres premiers. Ecrire un programme qui permet de vérifier cette conjecture. Cet entier sera passé en paramètre à une fonction qui calculera et affichera les
deux nombres premiers dont la somme produit cet entier (s'il y a plusieurs paires, les afficher). Procédure Générer_Couple (ĺ m : numérique) Début
Variable a, b : numériques
Répéter Pour a = 1 à m/2
b ĸ m - a Ecrire "(», a, " , », b, " ) »
Si (Premier (a) et Premier(b)) alors
Ecrire " "Conjecture de Goldbach vérifiée car », m, " = » , a, " + », b Fsi FinPour
Fin Dans le programme principal, il faut verifier que le nombre inséré soit pair (Nb modulo 2 = 0) Exercice VII :
Deux nombres entiers N et M sont dits amicaux si la somme des diviseurs de N (N non compris) vaut M et la somme des diviseurs de M (M non compris) vaut N. - Ecrire une fonction retournant la somme des diviseurs d'un entier passé en paramètre : - Ecrire une fonction recevant en paramètre deux entiers et retournant une valeur booléenne selon qu'ils sont amicaux ou non. Ex : 220 et 284, 1.184 et 1.210, 17.296 et 18.416, 9.363.584 et 9.437.05 6. Les nombres amicaux ont une histoire liée depuis longtemps à la magie et à l'astrologie. Par
exemple, certains commentateurs juifs de la Genèse pensaient que Jacob avait donné 220 moutons (200 femelles et 20 males) à son frère quand il commença à craindre que son frère le tue (Genèsé 32:14). Le philosophe Iamblichus de Chalcis (ca. 250-330 A.C.) écrit que les pythagoriciens connaissent ces nombres qu'ils appellent amicaux et leur associent certaines qualités sociales (comme 220 et 284) et Pythagore aurait parlé d'un ami qui 'était un autre lui'
comme le sont 220 et 284. Il n'existe pas de formule ou méthode connues pour déterminer les nombres amicaux mais au fil des ans, certains types spéciaux ont été découverts. Thabit ibn Kurrah (ca.850 A.C.) nota
que: si n>1 et si p = 3.2 n-1 -1, q = 3.2 n -1 et r = 9.2 2n-1 -1 sont premiers, alors 2 n pq et 2 n r sont des nombres amicaux. Il fallut cependant des siècles pour que cette formule produise les 2 ème
et 3 ème
paires de nombres amicaux! Fermat annonça la paire 17.296 - 18.416 (n=4) dans une lettre à Mersenne en 1636. Descartes écrivit à Mersenne en 1638 pour lui signaler la paire 9.363.584 - 9.437.056 (n=7). Euler ajouta quant à lui une
liste de 64 nouveaux nombres amicaux en faisant ainsi 2 erreurs qui furent découvertes en 1909 et 1914. En 1866 un jeune garçon de 16 ans, Nicolo Paganini, découvrit la paire 1.184 - 1.210 qui avaient été ignorée jusque là.
Des recherches par ordinateur ont permis de trouver toutes les paires de nombres amicaux de moins de 10 chiffres ainsi quelques autres encore plus grands pour en arriver à un total de 7.500 paires. On n'a pas pu montrer ni qu'il existe un nombre infini de paires ni qu'il existe
une paire de nombres premiers entre eux. Si une telle paire existe, chacun des nombres doit comporter plus de 15 chiffres et leur produit doit doit être divisible par au moins 22 nombres premiers. Variables M, N, SM, i : numériques
Ecrire "Introduisez les nombres à tester:"
Ecrire "N="
Lire N
Ecrire "M="
Lire M
SN 1 Répéter pour i=2 à N-1 faire
si N mod i=0 alors SN SN+i fsi fpour SM 1 Répéter Pour i=2 à M-1 faire
si M mod i=0 alors SM SM+i fsi Fpour si (SN=M) et (SM=N) alors Ecrire N, " et ", M," sont des nombres amicaux!"
sinon Ecrire N, " et ", M," ne sont pas des nombres amicaux!" fsi public class amicaux public static void main (String [] arg) int N, M, SM, SN, i; N = Lire.i();
M = Lire.i();
SM = 1;
for (i=2; iSM = SM +i;
System.out.println(i+" ");
System.out.println("somme = "+SM);
SN = 1;
for (i=2; iSN = SN +i;
Si Modulo(n,d)=0 alors
Prem ĸ Faux
Sinon d ĸ d + 2 FsiFin Tant Que
// Version 5 : On pense à ne pas essayer les multiples de 2, ni de 3 // On essaie donc seulement 2, 3, 5, 7, 11, 13, 17, 19, 23, 25, ... // Soit 2, 3 puis des nombres de la forme 6 x k - 1 et 6 x k + 1 // On passe de 6 x k - 1 à 6 x k +1 en ajoutant 2 // puis de 6 x k + 1 à 6 x (k+1) - 1 en ajoutant 4 dmaxĸ PartieEntiere(RacineCarrée(n))
dĸ 5
Pasĸ 2
Si (Modulo (n, 2) =0 ou Modulo(n,3) = 0) alors
Prem ĸ Faux
SinonPrem ĸ Vrai
FsiTant Que (Prem = Vrai) et (d Si Modulo(n,d)=0 alors
Prem ĸ Faux
Sinon d ĸ d + pas pas ĸ 6 - pas Fsi Fin Tant Que
On n'élimine pas, parmi les diviseurs à essayer, les multiples de 7, de 11, ..., de manière analogue, car le gain sur les calculs ne compense pa s la complication apportée à l'algo. Version 6 : Pour accélérer encore la recherche, on n'essaie que les diviseurs premiers, stockés à l'avance, dans un tableau TabPrem qui contient donc les NombreD nombres premiers inférieurs à la racine carrée de Maxint.
d ĸ 1
Prem ĸ Vrai
Tant Que (Prem= Vrai et d <= NombreD) faire
Si Modulo (n, TabPrem[d])=0 alors
Prem ĸ Faux
Sinon d ĸ d+1 Fsi FinTantQue
Exercice III : Afficher la décomposition d'un nombre en produit facteurs premiers. Méthode : Si le nombre n admet le facteur premier p, il s'écrit n = p x m, il suffit alors d'écrire p , puis de recommencer avec m. Variables N, d : entier
Ecrire(" Nombre à décomposer ? »)
Lire (N)
d 2 // diviseur premier à essayer
Tant Que N > 1 faire
Si Modulo (N, d) = 0 alors
Ecrire (d)
N ĸ N / d
Sinon d ĸ d + 1 Fsi FinTantQue
Pour bien comprendre cet algorithme, il faut remarquer que lorsque d n' est pas un nombre premier, N n'est pas divisible par d car on a déjà divisé N par les facteurs premiers de d. On peut éviter d'essayer tous les entiers à partir de 2, mais c ela complique l'algorithme : on commencera par extraire tous les deux, pu is, dans une seconde boucle, les autres facteurs premiers à, partir de 3, essayant successivement 3, 5, 7, etc, ... Exemple : a= 50 et b= 25
Donc d prend la valeur 25
Exercice IV : Ecrire la fonction pgcd, dont le résultat est le plus grand commun diviseur des deux nombres fournis en paramètres. Une première idée consiste à essayer, en descendant, tous les pgcd éventuels jusqu'à atteindre un diviseur commun aux deux nombres. Plus efficace est l'algorithme d'Euclide, basé sur la propriété pgcd(a,b) = pgcd (b, a modulo b),
pour a et b > 0. Dans la première méthode, le mieux est d'initialiser le diviseu r commun éventuel au plus petit des deux nombres (supposés tous les deux > 0), car
le PGCD lui est inférieur au égal. On n'a pas à s'inquié ter de l'arrêt de la boucle : au pire elle s'arrêtera pour d = 1 ( a et b premiers entre eux). Exemple pgcd(27,9) on trouve 9
Pgcd (25, 10) : On trouve 5
Fonction PGCD(ĺa : entier, ĺ b : entier) : entier Variable d : entier
Début
Si (a < b) alors
d ĸ a Sinon d ĸ b Fsi Tant que (non(modulo(a,d)=0) et modulo (b, d)=0) faire d ĸ d -1 Fin Tant Que
Résultat d
Fin Deuxième méthode : Avec l'algorithme d'Euclide Fonction PGCDEuclide(ĺa : entier, ĺ b : entier) : entier Variable r : entier // reste de la division de a par b Début
Tant que (b>0) faire
r ĸ modulo(a,b) a ĸ b b ĸ r Fin Tant Que
Résultat a
Fin Le résultat est le dernier reste non nul. Soit p le pgcd de a et b, i l est obtenu dans une exécution de la boucle qui calcule r ĸp, aĸb et b ĸp. On a alors encore b>0, donc une nouvelle exécution de la boucle est effe ctuée rĸ0, a ĸp, bĸ0 : la boucle s'arrête enfin, mais p est dans a. Contrairement à une idée répandue, il n'est pas nécessair e, lorsque a < b, de procéder à l'échange de leurs valeurs, avant la boucle. E n effet, si a < b , la boucle effectue les affectations suivantes : r ĸ a (car a < b, a modulo b = a), puis a ĸ b, enfin b ĸ r, ce qui échange a et b. Exercice V : Ecrire la fonction ppcm, en utilisant la fonction pgcd (rappel pgcd(a,b) * ppcm (a,b) = a x b). Exercice VI :
La conjecture de Goldbach veut que tout nombre pair strictement supérieur à 2 soit la somme de deux nombres premiers. Ecrire un programme qui permet de vérifier cette conjecture. Cet entier sera passé en paramètre à une fonction qui calculera et affichera les
deux nombres premiers dont la somme produit cet entier (s'il y a plusieurs paires, les afficher). Procédure Générer_Couple (ĺ m : numérique) Début
Variable a, b : numériques
Répéter Pour a = 1 à m/2
b ĸ m - a Ecrire "(», a, " , », b, " ) »
Si (Premier (a) et Premier(b)) alors
Ecrire " "Conjecture de Goldbach vérifiée car », m, " = » , a, " + », b Fsi FinPour
Fin Dans le programme principal, il faut verifier que le nombre inséré soit pair (Nb modulo 2 = 0) Exercice VII :
Deux nombres entiers N et M sont dits amicaux si la somme des diviseurs de N (N non compris) vaut M et la somme des diviseurs de M (M non compris) vaut N. - Ecrire une fonction retournant la somme des diviseurs d'un entier passé en paramètre : - Ecrire une fonction recevant en paramètre deux entiers et retournant une valeur booléenne selon qu'ils sont amicaux ou non. Ex : 220 et 284, 1.184 et 1.210, 17.296 et 18.416, 9.363.584 et 9.437.05 6. Les nombres amicaux ont une histoire liée depuis longtemps à la magie et à l'astrologie. Par
exemple, certains commentateurs juifs de la Genèse pensaient que Jacob avait donné 220 moutons (200 femelles et 20 males) à son frère quand il commença à craindre que son frère le tue (Genèsé 32:14). Le philosophe Iamblichus de Chalcis (ca. 250-330 A.C.) écrit que les pythagoriciens connaissent ces nombres qu'ils appellent amicaux et leur associent certaines qualités sociales (comme 220 et 284) et Pythagore aurait parlé d'un ami qui 'était un autre lui'
comme le sont 220 et 284. Il n'existe pas de formule ou méthode connues pour déterminer les nombres amicaux mais au fil des ans, certains types spéciaux ont été découverts. Thabit ibn Kurrah (ca.850 A.C.) nota
que: si n>1 et si p = 3.2 n-1 -1, q = 3.2 n -1 et r = 9.2 2n-1 -1 sont premiers, alors 2 n pq et 2 n r sont des nombres amicaux. Il fallut cependant des siècles pour que cette formule produise les 2 ème
et 3 ème
paires de nombres amicaux! Fermat annonça la paire 17.296 - 18.416 (n=4) dans une lettre à Mersenne en 1636. Descartes écrivit à Mersenne en 1638 pour lui signaler la paire 9.363.584 - 9.437.056 (n=7). Euler ajouta quant à lui une
liste de 64 nouveaux nombres amicaux en faisant ainsi 2 erreurs qui furent découvertes en 1909 et 1914. En 1866 un jeune garçon de 16 ans, Nicolo Paganini, découvrit la paire 1.184 - 1.210 qui avaient été ignorée jusque là.
Des recherches par ordinateur ont permis de trouver toutes les paires de nombres amicaux de moins de 10 chiffres ainsi quelques autres encore plus grands pour en arriver à un total de 7.500 paires. On n'a pas pu montrer ni qu'il existe un nombre infini de paires ni qu'il existe
une paire de nombres premiers entre eux. Si une telle paire existe, chacun des nombres doit comporter plus de 15 chiffres et leur produit doit doit être divisible par au moins 22 nombres premiers. Variables M, N, SM, i : numériques
Ecrire "Introduisez les nombres à tester:"
Ecrire "N="
Lire N
Ecrire "M="
Lire M
SN 1 Répéter pour i=2 à N-1 faire
si N mod i=0 alors SN SN+i fsi fpour SM 1 Répéter Pour i=2 à M-1 faire
si M mod i=0 alors SM SM+i fsi Fpour si (SN=M) et (SM=N) alors Ecrire N, " et ", M," sont des nombres amicaux!"
sinon Ecrire N, " et ", M," ne sont pas des nombres amicaux!" fsi public class amicaux public static void main (String [] arg) int N, M, SM, SN, i; N = Lire.i();
M = Lire.i();
SM = 1;
for (i=2; iSM = SM +i;
Si Modulo(n,d)=0 alors
Prem ĸ Faux
Sinon d ĸ d + pas pas ĸ 6 - pas FsiFin Tant Que
On n'élimine pas, parmi les diviseurs à essayer, les multiples de 7, de 11, ..., de manière analogue, car le gain sur les calculs ne compense pa s la complication apportée à l'algo. Version 6 : Pour accélérer encore la recherche, on n'essaie que les diviseurs premiers, stockés à l'avance, dans un tableau TabPrem qui contient donc les NombreD nombres premiers inférieurs à la racine carrée deMaxint.
dĸ 1
Premĸ Vrai
Tant Que (Prem= Vrai et d <= NombreD) faire
Si Modulo (n, TabPrem[d])=0 alors
Prem ĸ Faux
Sinon d ĸ d+1 FsiFinTantQue
Exercice III : Afficher la décomposition d'un nombre en produit facteurs premiers. Méthode : Si le nombre n admet le facteur premier p, il s'écrit n = p x m, il suffit alors d'écrire p , puis de recommencer avec m.Variables N, d : entier
Ecrire(" Nombre à décomposer ? »)
Lire (N)
d2 // diviseur premier à essayer
Tant Que N > 1 faire
Si Modulo (N, d) = 0 alors
Ecrire (d)
N ĸ N / d
Sinon d ĸ d + 1 FsiFinTantQue
Pour bien comprendre cet algorithme, il faut remarquer que lorsque d n' est pas un nombre premier, N n'est pas divisible par d car on a déjà divisé N par les facteurs premiers de d. On peut éviter d'essayer tous les entiers à partir de 2, mais c ela complique l'algorithme : on commencera par extraire tous les deux, pu is, dans une seconde boucle, les autres facteurs premiers à, partir de 3, essayant successivement 3, 5, 7, etc, ...Exemple : a= 50 et b= 25
Donc d prend la valeur 25
Exercice IV : Ecrire la fonction pgcd, dont le résultat est le plus grand commun diviseur des deux nombres fournis en paramètres. Une première idée consiste à essayer, en descendant, tous les pgcd éventuels jusqu'à atteindre un diviseur commun aux deux nombres. Plusefficace est l'algorithme d'Euclide, basé sur la propriété pgcd(a,b) = pgcd (b, a modulo b),
pour a et b > 0. Dans la première méthode, le mieux est d'initialiser le diviseu r commun éventuel au plus petit des deux nombres (supposés tous les deux >0), car
le PGCD lui est inférieur au égal. On n'a pas à s'inquié ter de l'arrêt de la boucle : au pire elle s'arrêtera pour d = 1 ( a et b premiers entre eux).Exemple pgcd(27,9) on trouve 9
Pgcd (25, 10) : On trouve 5
Fonction PGCD(ĺa : entier, ĺ b : entier) : entierVariable d : entier
Début
Si (a < b) alors
d ĸ a Sinon d ĸ b Fsi Tant que (non(modulo(a,d)=0) et modulo (b, d)=0) faire d ĸ d -1Fin Tant Que
Résultat d
Fin Deuxième méthode : Avec l'algorithme d'Euclide Fonction PGCDEuclide(ĺa : entier, ĺ b : entier) : entier Variable r : entier // reste de la division de a par bDébut
Tant que (b>0) faire
r ĸ modulo(a,b) a ĸ b b ĸ rFin Tant Que
Résultat a
Fin Le résultat est le dernier reste non nul. Soit p le pgcd de a et b, i l est obtenu dans une exécution de la boucle qui calcule r ĸp, aĸb et b ĸp. On a alors encore b>0, donc une nouvelle exécution de la boucle est effe ctuée rĸ0, a ĸp, bĸ0 : la boucle s'arrête enfin, mais p est dans a. Contrairement à une idée répandue, il n'est pas nécessair e, lorsque a < b, de procéder à l'échange de leurs valeurs, avant la boucle. E n effet, si a < b , la boucle effectue les affectations suivantes : r ĸ a (car a < b, a modulo b = a), puis a ĸ b, enfin b ĸ r, ce qui échange a et b. Exercice V : Ecrire la fonction ppcm, en utilisant la fonction pgcd (rappel pgcd(a,b) * ppcm (a,b) = a x b).Exercice VI :
La conjecture de Goldbach veut que tout nombre pair strictement supérieur à 2 soit la somme de deux nombres premiers. Ecrire un programme qui permet de vérifier cetteconjecture. Cet entier sera passé en paramètre à une fonction qui calculera et affichera les
deux nombres premiers dont la somme produit cet entier (s'il y a plusieurs paires, les afficher). Procédure Générer_Couple (ĺ m : numérique)Début
Variable a, b : numériques
Répéter Pour a = 1 à m/2
b ĸ m - aEcrire "(», a, " , », b, " ) »
Si (Premier (a) et Premier(b)) alors
Ecrire " "Conjecture de Goldbach vérifiée car », m, " = » , a, " + », b FsiFinPour
Fin Dans le programme principal, il faut verifier que le nombre inséré soit pair (Nb modulo 2 = 0)Exercice VII :
Deux nombres entiers N et M sont dits amicaux si la somme des diviseurs de N (N non compris) vaut M et la somme des diviseurs de M (M non compris) vaut N. - Ecrire une fonction retournant la somme des diviseurs d'un entier passé en paramètre : - Ecrire une fonction recevant en paramètre deux entiers et retournant une valeur booléenne selon qu'ils sont amicaux ou non. Ex : 220 et 284, 1.184 et 1.210, 17.296 et 18.416, 9.363.584 et 9.437.05 6.Les nombres amicaux ont une histoire liée depuis longtemps à la magie et à l'astrologie. Par
exemple, certains commentateurs juifs de la Genèse pensaient que Jacob avait donné 220 moutons (200 femelles et 20 males) à son frère quand il commença à craindre que son frère le tue (Genèsé 32:14). Le philosophe Iamblichus de Chalcis (ca. 250-330 A.C.) écrit que les pythagoriciens connaissent ces nombres qu'ils appellent amicaux et leur associent certainesqualités sociales (comme 220 et 284) et Pythagore aurait parlé d'un ami qui 'était un autre lui'
comme le sont 220 et 284. Il n'existe pas de formule ou méthode connues pour déterminer les nombres amicaux mais aufil des ans, certains types spéciaux ont été découverts. Thabit ibn Kurrah (ca.850 A.C.) nota
que: si n>1 et si p = 3.2 n-1 -1, q = 3.2 n -1 et r = 9.2 2n-1 -1 sont premiers, alors 2 n pq et 2 n r sont des nombres amicaux. Il fallut cependant des siècles pour que cette formule produise les 2ème
et 3ème
paires de nombres amicaux! Fermat annonça la paire 17.296 - 18.416 (n=4) dans une lettre à Mersenne en 1636. Descartes écrivit à Mersenne en 1638 pour lui signaler la paire 9.363.584 -9.437.056 (n=7). Euler ajouta quant à lui une
liste de 64 nouveaux nombres amicaux en faisant ainsi 2 erreurs qui furent découvertes en 1909 et 1914. En 1866 un jeune garçon de 16ans, Nicolo Paganini, découvrit la paire 1.184 - 1.210 qui avaient été ignorée jusque là.
Des recherches par ordinateur ont permis de trouver toutes les paires de nombres amicaux de moins de 10 chiffres ainsi quelques autres encore plus grands pour en arriver à un total de7.500 paires. On n'a pas pu montrer ni qu'il existe un nombre infini de paires ni qu'il existe
une paire de nombres premiers entre eux. Si une telle paire existe, chacun des nombres doit comporter plus de 15 chiffres et leur produit doit doit être divisible par au moins 22 nombres premiers.Variables M, N, SM, i : numériques
Ecrire "Introduisez les nombres à tester:"
Ecrire "N="
Lire N
Ecrire "M="
Lire M
SN 1Répéter pour i=2 à N-1 faire
si N mod i=0 alors SN SN+i fsi fpour SM 1Répéter Pour i=2 à M-1 faire
si M mod i=0 alors SM SM+i fsi Fpour si (SN=M) et (SM=N) alorsEcrire N, " et ", M," sont des nombres amicaux!"
sinon Ecrire N, " et ", M," ne sont pas des nombres amicaux!" fsi public class amicaux public static void main (String [] arg) int N, M, SM, SN, i;N = Lire.i();
M = Lire.i();
SM = 1;
for (i=2; iSystem.out.println(i+" ");
System.out.println("somme = "+SM);
SN = 1;
for (i=2; iSystem.out.println(i+" ");
System.out.println("somme = "+SM);
} // mainAutre solution :
public class amicaux public static void main (String [] arg) int N, M, SM, SN, i;quotesdbs_dbs45.pdfusesText_45[PDF] classification des antalgiques selon les paliers de l'oms
[PDF] mode d'action des antalgiques
[PDF] classification des antalgiques pdf
[PDF] classification antalgiques has
[PDF] stylistique comparée du français et de l'anglais pdf
[PDF] stylistique comparée du français et de l'anglais vinay et darbelnet
[PDF] stylistique comparée du français et de l'anglais vinay et darbelnet pdf
[PDF] stylistique comparée du français et de l'anglais méthode de traduction pdf
[PDF] poème en prose rimbaud
[PDF] l'art nous détourne-t-il de la réalité corrigé
[PDF] l'art doit il plaire introduction
[PDF] selon vous la mise en scène de la parole dans les espaces de prise de parole publique
[PDF] poeme objet banal
[PDF] poème sur des objets du quotidien