Trouver le nombre X

Signaler
Messages postés
2
Date d'inscription
mardi 29 juin 2010
Statut
Membre
Dernière intervention
30 juin 2010
-
Messages postés
14
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
9 mars 2011
-
bonjour les amis ,
je viens de résoudre une énigme mathématique qui dit :

Trouver le Nombre X , composé de 87 chiffres , et divisible par 2^87 , et il est composé juste par les chiffres 8 et 7, ( les 87 chiffres sont des 8 ou des 7 ).

Alors j'ai trouvé l'idée , on va cherché le nombre X en procédant comme suit:
*Le nombre composé de 1 chiffre à droite doit être divisible par 2^1 alors c'est 8.
*Le nombre composé de 2 chiffres à droite doit être divisible par 2^2 alors c'est 88.
*Le nombre composé de 3 chiffre à droite doit être divisible par 2^3 alors c'est 888.
*Le nombre composé de 4 chiffre à droite doit être divisible par 2^4 alors c'est 7888. ( Jusque ici on a trouvé les 4 derniers chiffres du X)
.....
Jusqu'au nombre X composé de 87 chiffres.

Le problème c'est que c'est pas facile à la main ... alors j'ai besoin d'un programme qui me donne le résultat , j'ai essayé avec le programme au dessus mais ca marche pas , Vous pouvez m'aider SVP ... SVP ... et Merci d'avance...
je suis débutant , j'utilise CodeBlocks et comme vous voyez c'est un code très très basique

Voila le Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{

  int  T[86]={0};
  int y,i;
  int x=8;



  for (i=0;i<87;i++)

        {

            T[i]=8;
            y=pow(2,i+1);
            if (x%y==0)

                    {
                        T[i]=8;
                    }
            else
                    {
                         T[i]=7;
                    }



                        x=x+(T[i]*pow(10,i+1));

                        printf(" %d \n",x);

        }

         printf("\n\nle nombre est :");

        for (i=86;i>=0;i--)
            {
                printf("%d",T[i]);
            }

          printf("\n\n");

  return 0;
}


Merciiiiii

5 réponses

Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
8
Je ne comprend pas le nombre est composé de 87 chiffres et il soit être divisible par 2^87 ( 2^87 a plus de 87 chiffres).



louis
Messages postés
2
Date d'inscription
mardi 29 juin 2010
Statut
Membre
Dernière intervention
30 juin 2010

Merci Louis

mais , 2^87=154742504910672534362390528

cad il a 27 chiffres seulement

cordia..
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
8
Pardon pour la remarque.
Dans ce cas il faut passer par une classe qui gère les grands nombres car int ou long ont une valeur max qui est inférieure à un nombre de 87 chiffres ( j'ai essayé 2^87 avec pow et j'ai 0 comme résultat).
A la place de pow utilise (*2). et forme ton nombre avec : ancien*10 + (8 ou 7).
Il y a une classe de ce type sur ce site ou bien google est ton ami.

louis
Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
2
Tout à fait louis!

unsigned long int est codé sur 32 ou 64 bits selon ta machine donc le maximum que tu peux obtenir est 2^32 ou 2^64

Mais le problème ici est de trouver un nombre ayant une relation de multiple/diviseur dans deux bases différentes (base 2 pour les diviseurs, base 10 pour les chiffres) Peut etre qu'il existe une manière analytique et non algorithmique pour résoudre ce problème.

Sinon, une classe pour les "grands entiers" comme l'a bien suggeré Louis!

Nico
Messages postés
14
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
9 mars 2011

Boost offre des classes de grands entiers, je crois...

Sinon ma première idée serait :
- déterminer l'ordre de grandeur du facteur
- tenter de multiplier le nombre avec plusieurs facteurs
- traiter le nombre obtenu comme une chaine et comparer chaque "chiffre" à 8 et 7 pour vérifier...

long et moche

Faut demander au mathématiciens