Il s'agit d'un problème de programme efficace ou inefficace dont voici les
lignes de code:

lesfin:[]$for n in [11,101,1001,2002,3003,4004,5005,6006,7007,8008,9009] do
block(
    arret:oddp(apply("+",map(eval_string,charlist(string(n))))),
    for i:n step n thru 10^19 while not arret do block(
        arret: oddp(apply("+",map(eval_string,charlist(string(i))))),
        if arret then push([i/n-1,n],lesfin)))$
elapsed_run_time();

Elles évaluent ceci:
* un nombre est digitalement paire si la somme de ces chiffres est paire ->
arret:oddp(apply("+",map(eval_string,charlist(string(n)))))
* on regarde les multiples successifs d'un nombre digitalement paire -> for
i:n step n thru 10^19 while not arret do block( avec thru 10^19 comme test
d'arrêt en parachute ventral...
* on détermine le nombre de ces multiples digitalement paire jusqu'au
premier non paire ->arret:
oddp(apply("+",map(eval_string,charlist(string(i))))),
* ce nombre est l'"ordre" -> push([i/n-1,n],lesfin)))

Que vaut cet ordre? etc...

J'explore quelque nombres pour voir: ->for n in
[11,101,1001,2002,3003,4004,5005,6006,7007,8008,9009]

Voilà le contexte.

Le problème c'est que tout cela me semble bien "lent" à l’exécution et
devient même de plus en plus lent quand  je change la liste à explorer....

Y-a-t-il plus efficace que ces lignes?

Merci à tous par avance
------------------------------------------------------------------------------
_______________________________________________
Maxima-lang-fr mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/maxima-lang-fr

Répondre à