mustaphase
Messages postés2Date d'inscriptionmardi 29 juin 2010StatutMembreDernière intervention30 juin 2010
-
29 juin 2010 à 14:59
manudiclemente
Messages postés14Date d'inscriptionvendredi 14 mai 2010StatutMembreDernière intervention 9 mars 2011
-
2 juil. 2010 à 05:08
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;
}
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 1 juil. 2010 à 08:57
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.
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 20103 1 juil. 2010 à 10:43
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
manudiclemente
Messages postés14Date d'inscriptionvendredi 14 mai 2010StatutMembreDernière intervention 9 mars 2011 2 juil. 2010 à 05:08
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...