Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PGCD : ALGORITHME D'EUCLIDE PAR RECURSIVITÉ


Information sur la source

Catégorie :Maths & Algorithmes Classé sous : euclide, algorithme, division, sucessive, pgcd Niveau : Débutant Date de création : 17/09/2006 Date de mise à jour : 17/09/2006 18:06:57 Vu : 7 042

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Il existe une fonction pour trouver le PGCD je vous en propose une autre ici.
Cette fonction est recursive et ecrit les étapes intermediaires jusqu'a vous donner le PGCD d'un nombre
 

Source

  • <?php
  • function pgcd($diviseur,$reste)
  • {
  • //
  • // Verifie si le reste est egal a 0 si oui on a trouvé le PGCD
  • //
  • if ($reste == 0)
  • {
  • echo "<b>PGCD :</b>$diviseur";
  • }
  • //
  • // Sinon on continu de le chercher
  • //
  • else
  • {
  • echo "$diviseur/$reste = ".intval(abs($diviseur/$reste))." reste ".$diviseur%$reste."<br />";
  • pgcd($reste,$diviseur%$reste); // recursivité
  • }
  • }
  • echo 'PGCD('.$_GET['nbr1'].';'.$_GET['nbr2'].')<br /><br />';
  • echo max($_GET['nbr1'],$_GET['nbr2']).'/'.min($_GET['nbr1'],$_GET['nbr2']).' = '.intval(abs(max($_GET['nbr1'],$_GET['nbr2'])/min($_GET['nbr1'],$_GET['nbr2']))).' reste '.max($_GET['nbr1'],$_GET['nbr2'])%min($_GET['nbr1'],$_GET['nbr2']).'<br />';
  • pgcd(min($_GET['nbr1'],$_GET['nbr2']),max($_GET['nbr1'],$_GET['nbr2'])%min($_GET['nbr1'],$_GET['nbr2']));
  • ?>
<?php
function pgcd($diviseur,$reste)
{
    //
    // Verifie si le reste est egal a 0 si oui on a trouvé le PGCD
    //
    if ($reste == 0)
    {
        echo "<b>PGCD :</b>$diviseur";
    }
    //
    // Sinon on continu de le chercher
    //
    else
    {
        echo "$diviseur/$reste = ".intval(abs($diviseur/$reste))." reste ".$diviseur%$reste."<br />";
        pgcd($reste,$diviseur%$reste); // recursivité
    }
}

echo 'PGCD('.$_GET['nbr1'].';'.$_GET['nbr2'].')<br /><br />';
echo max($_GET['nbr1'],$_GET['nbr2']).'/'.min($_GET['nbr1'],$_GET['nbr2']).' = '.intval(abs(max($_GET['nbr1'],$_GET['nbr2'])/min($_GET['nbr1'],$_GET['nbr2']))).' reste '.max($_GET['nbr1'],$_GET['nbr2'])%min($_GET['nbr1'],$_GET['nbr2']).'<br />';
pgcd(min($_GET['nbr1'],$_GET['nbr2']),max($_GET['nbr1'],$_GET['nbr2'])%min($_GET['nbr1'],$_GET['nbr2']));
?>

Conclusion

Ce script prend 2 parametres en GET :
nbr1 : qui est le premier nombre
nbr2 : qui est le deuxieme

Exemple d'appelle : script.php?nbr1=15&nbr2=5

Pour rapelle le PGCD est le plus grand commun diviseur

mon site : http://iow4.net
 

Historique

17 septembre 2006 18:06:57 :
ajout d'explication sur les parametres GET

Commentaires et avis

signaler à un administrateur
Commentaire de Skreo le 25/09/2006 12:56:51

Dis moi tu serais pas en spé maths par hasard ? ^^

signaler à un administrateur
Commentaire de iow4 le 25/09/2006 17:36:19

Je suis en 3éme.
Je sais que cet algo est vraiment simple mais il illustre bien la recursivité !

signaler à un administrateur
Commentaire de Skreo le 26/09/2006 12:53:31

Ok, j'hésitais entre le fait que tu sois en 3ème ou en Terminale spé maths.
Car en spé maths on revoit le pgcd rapidement. Et comme malgré la simplicité du code, tu a l'air assez expérimenté...
Mais je pense que ta fonction peut-être encore beaucoup plus simple. Le problème c'est qu'elle ne se contente d'afficher un résultat.
Il faudrait qu'elle renvoit en plus les résultat, et mettre par exemple un argument optionnel permettant d'activer ou nom l'affichage des étapes.

signaler à un administrateur
Commentaire de iow4 le 01/10/2006 19:02:10

Si tu trouve le moyen d'en faire une plus simple je t'ecoute bien volontier.
Tu entends quoi par "resultat" ?

Les gens qui ne veulent pas voir les opérations intermediaire utilise la fonction de PHP toute faite.

signaler à un administrateur
Commentaire de Kevin007 le 01/10/2006 21:48:42

Bonsoir à toi, Iow4 !

En effet, je crois qu'il existe plus court ;=)
Je ne l'ai pas testé, car j'ai eu un crash de mon serveur Web... mais je te laisse l'essayer toi-même...

Elle devrait fonctionner, c'est un reste de ma vieille mémoire ;=) :

function greatest_common_divisor( $a, $b )
    {
         if ( is_int( $a ) && is_int( $b ) )
               {
                      return ( $a % $b ) ? greatest_common_divisor( $b, $a % $b ) : $b;
               }
     }

Bonne soirée à toi !
N'hésite pas à me dire si elle fonctionne ;=)

signaler à un administrateur
Commentaire de Skreo le 02/10/2006 18:01:47

Ouép je pensais à une fonction dans le genre ^^
Mais là tu calcules 2 fois le reste, tu devrais plutôt le stocker dans une variable :

function greatest_common_divisor($a, $b){
    if(!is_int($a) || !is_int($b)) return false;
    $reste = $a%$b;
    return $reste==0 ? $b : greatest_common_divisor($b, $reste);
}

signaler à un administrateur
Commentaire de iow4 le 24/10/2006 20:18:41

Le but principale de cette source est de retourner toutes les étapes nécessaires à l'obtension du PGCD, il faut donc afficher les étapes intermediaire ( pas fait dans votre source )

Merci quand même de votre participation ;-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

division [ par eax ] salutje fais une division et j'affiche le résultat avecprintf("%2.3f", $test);mais lorsque le résultat est un entier, il m'affiche ,0 derrière, bon d' Algorithme de tri ... [ par LocalStone ] Salut à tous ! Il y a peut-être 1 mois et demi, j'ai lu un article - ou plutôt un tutorial - sur comment mettre en place un algorithme de tri automati Algorithmique ... [ par LocalStone ] Salut &#224; tous ...Alors voil&#224;, j'ai eu une id&#233;e et je cherche des personnes suc&#233;ptibles de pouvoir m'aider &#224; cr&#233;er une tel Limiter les décimales du résultat d'une division [ par pierki ] Je cherche a supprimer les d&#233;cimales du r&#233;sultat d'une division.Comment faire ?pierkiz aide pour un algorithme ! [ par shaoling ] Bonjour, j'ai une &#233;nigme &#224; r&#233;soudre, et pour cela je compte bien m'aider du php ! Voici l'&#233;nigme :Pour la somme de 5 euros, on a a Division dans une requête SQL [ par Kevergeek ] Donc voil&#224; j'ai une base de donn&#233;es dont une table (montages) qui comporte une colonne (votes) qui contient 2 nombres s&#233;par&#233;s par Combinaison, algorithme combinatoire, algo de boole [ par pssinjaune ] Bonjour a tous,je n'ai jamais étais une fleche en maths, je dois developper un algorithme qui permet d'afficher toute les combinaisons possible de N é Aide algorithme Ladder (situation industrielle) [ par JoeBlo25 ] Bonjour, j'ai une situation a réaliser en Ladder mais je ne sais pas par ou commencer (je suis débutant). J'ai 2 réservoirs allimentés par une décharg algorithme évolutionnaire [ par rafik077 ] bonjour, j'ai un projet sur létude comparative d'algorithme évolutionnaire(algorithme génétique).j'ai besoin de code c++ de méthodes drmoga et méthode Cherche algorithme de devinette [ par ycochard ] Bonjour,Je cherche l'algorithme qui se trouve derrière ce petit jeu :http://www.akinator.com/aki_fr/ (attention les yeux, ça flashe)Vous savez comment


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,41 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.