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

Algorithmes et structures de données Discussion :

Multiplication égyptienne


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Multiplication égyptienne
    Salut a tous

    J'ai du mal avec mon exo d'algo :/

    Donc voici le sujet :
    Dans l'antiquite, les egyptiens savaient sans utiliser la multiplication sauf par 2, calculer le produit de deux entiers positifs, par decomposition successives grace a la decomposition suivante

    a*b = a+a*(b-1) si b est impair
    a*2 * (b/2) sinon
    Jusqu'a ce que b=1

    Ecrire l'algorithme realisant le produit d de nombres entiers en utilisant cette methode.

    Un grand merci a ceux qui vont repondre

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    dans mon souvenir la multiplication egyptienne etais
    Pour tout nombre N
    trouver plus grand diviseur multiple de 2
    et refaire l’opération jusqu’à que le reste soit égale a 0

    imaginons que tu ai : 251 * 21
    on cherche les valeur de 2 pour le plus petit nombre donc dans notre cas 21
    la table des puissance de 2 est :
    20 = 1
    21 = 2
    22 = 2*2 = 4
    23 = 2*2*2 = 8
    ....
    ce qui nous donne les valeurs suivantes :
    1;2;4;8;16;32;64;128 ...

    on décompose notre multiplicateur :
    21 - 16 = 5
    5 - 4 = 1
    1 - 1 = 0

    21 = 16 + 4 + 1 donc d'après la distributivité de la multiplication par rapport à l'addition, 21 × 251 = (16 + 4 + 1) × 251 = 16 × 251 + 4 × 251 + 1 × 251
    = 4016+1004+251= 5271

    ce que nous pourrions traduire par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    x ← a
    y ← b
    z ← 0
    TANSQUE y >= 0 FAIRE
      SI y  IMPAIRE ALORS
         z ← z + x
      FINSI
      x ← 2 × x
      y ← y div 2
    FIN FAIRE
    résultat z
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    oui c'est bien ça!

    La multiplication égyptienne fonctionne en isolant les puissances de 2 qui composent le multiplicateur. Si tu prends une représentation binaire de ton multiplicateur, le principe saute aux yeux:

    21 = 10101b
    = 10000b
    + 100b
    + 1b

    Comme l'ordinateur a une représentation binaire des nombres, cet algorithme est très rapide (pour les nombres entiers positifs):

    multiplier par 2 revient à décaler d'un bit vers la gauche (en C: x << 1), par 22 de deux bits, 23 trois bits, etc.
    diviser par 2 revient à décaler d'un bit vers la droite (en C: x >> 1)
    enfin on peut tester si le premier bit est allumé avec x & 1

    d'où

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int mult(int a, int b) {
      if (a == 1) return b;
      if (a & 1)
        return b + mult(a - 1, b);
      else 
        return mult(a >> 1, b << 1);
    }

    Naturellement on peut améliorer cet algorithme mais le principe reste le même.

    NB: l'algorithme s'appelle également la multiplication du paysan russe

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci bcp
    La c'est claire

    A toute

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  2. Multiple Count
    Par Antichoc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2003, 11h19
  3. formulaire choix multiple
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/02/2003, 18h59
  4. Création multiple table paradox dans le code
    Par scarabee dans le forum C++Builder
    Réponses: 8
    Dernier message: 30/10/2002, 10h17
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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