@SPH, je te remercie à nouveau de ta peine.
Alors la, avec ça je devrais m'en sortir.
Je le teste ce week-end et je te tiens au courant.
@Patrick, tu as raison, ça parait simple au premier abord, ta reponse m'a meme fait rire et mis le doute.
Le bleme c'est que l'on ne connais pas la somme des chiffres (12) puisque l'on ne connait pas le nombre qui est multiplié. Maintenant, il est vrai qu'avec 534 ça parait evident, mais avec un nombre de 12 à 15 chiffres ça rame un peu plus.
Ta logique est peut etre pas bete non plus, je pense que tu veut dire qu'en divisant par une variable que l'on incremente de 1 a chaque boucle, on devrait retrouver le nombre qui est egal a la variable en faisant l'addition de ses chiffres pour sortir de cette boucle.
A mediter, j'essaierais ce WE aussi.
Je n'ose à peine vous poster la reponse que j'ai eue sur un forum de mathématique.
Ils m'on parlé d'algorithme d'euclide (EAA) et de logaritme neperien et decimal.
Ayant arreté les math à la maternelle, j'ai trouvé la reponse plus compliquée que la question.
Je vous poste leur reponse, alors la vous allez rire parce que entre ta soluce et la leur ........y'a une galaxie.
Qui a raison ?????
Quoi qu'il en soit, je remercie aussi ces personnes de la peine qu'elles se sont donnée à tenter de m'expliquer.
Bonne lecture, comprenne qui le peux. (Heureusement je leur est demandé d'y aller doucement)
Code : Tout sélectionner
Jusqu'où veux-tu aller ? Si cela reste raisonnable, disons, des nombres de quinze chiffres maximum, je pense que tu peux t'en tirer avec une fonction que tu ne connais probablement pas vu que tu as arrêté les maths en quatrième et qu'on apprend cette fonction en terminale ! Il s'agit de la fonction logarithme, souvent notée log ou ln. Cependant, en tant qu'informaticien, tu as accès à cette fonction dans de nombreux logiciels de programmation. Et rien ne t'empêche d'utiliser cette fonction log même si tu ne la connais pas.
Le nombre P de chiffres d'un nombre N est donné par la formule :
P = 1 + E( Log(N) / Log(10 )
(E(x) est la partie entière de x, c'est-à-dire le nombre n tel que )
n <= x < n + 1
Par exemple, si N = 1234567890123, avec ton ordinateur, tu peux calculer log(N) : tu trouves 27,8417..., puis log(10) : tu trouves 2,30258.... En divisant le premier par le deuxième, tu trouves 12,091... Tu en prends la partie entière : 12, et tu ajoutes 1, ça fait 13 ! Donc N a 13 chiffres.
À présent, si tu as le produit P du nombre N et de la somme de ses chiffres S, tu es certain que, puisque S est au moins égal à 1 (les chiffres ne peuvent pas être tous 0 !), que N est au plus égal à P : il ne peut pas être plus grand que P ! Si donc tu calcules, comme je viens de te montrer, le nombre de chiffres de P, tu es certain que le nombre de chiffres de N est au maximum égal au nombre de chiffres de P. Par conséquent, puisque par ailleurs tu es certain que chaque chiffre est au maximum égal à 9, en multipliant le nombre de chiffres de P par 9 tu es certain que S ne peut en aucun cas être plus grand que le résultat trouvé.
Or, cette procédure te donne un maximum pour S, qui sera toujours très petit ! Par exemple, en reprenant l'exemple du nombre 1234567890123 ci dessus, qui est déjà très grand, son nombre de chiffres est 13, et si 1234567890123 est le produit de la somme S des chiffres d'un nombre N, avec N, tu sais que S ne peut pas être plus grand que 9*13 soit 117.
Le nombre d'essais que tu dois donc faire est extrêmement réduit. En prenant sans réfléchir davantage tous les nombres de 2 à 117 et en essayant de diviser 1234567890123 par chacun de ces nombres, tu détecte très rapidement ceux d'entre eux pour lesquels ça tombe juste et tu n'as plus qu'à chercher si la somme des chiffres du quotient est bien égal au nombre testé !
A mon avis, tu n'as pas le temps d'aller te coucher...Tu fais trois pas vers ton lit, et c'est fini !
Bien sûr, si comme l'envisage Flodelarab, tu veux faire ça pour des nombres immenses, genre des nombres de plusieurs centaines de chiffres, c'est plus difficile car il te faut des modules qui peuvent calculer sur de grands nombres. A priori, la plupart des ordinateurs travaillent sur des nombres ayant au maximum 15 à 16 chiffres de précision : pour une plus grande précision, tu as besoin de programmes spéciaux.
Mais même dans ce cas-là, le temps de calcul sera à mon avis très court ! Avec un nombre de 300 chiffres, le S que l'on cherche est limité par 2700 (ben oui ! 9*300 !) ce qui reste encore très peu pour un ordinateur : il faudra quand même trouver un moyen de calculer sur de grands nombres...
Deuxieme reponse, un peu plus simple :
Code : Tout sélectionner
L'algorithme d'Euclide permet de décomposer un nombre en produit de nombres premiers mais cette décomposition ne suffira pas ici, il faut ensuite savoir dans la décomposition quels facteurs correspondent à la somme des chiffres et quels facteurs correspondent au nombre lui même.
J'aurais révé etre mathématicien .......
Merci à tous.