Deutsch English Français Italiano |
<6412599a$0$3011$426a74cc@news.free.fr> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!3.us.feeder.erje.net!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!cleanfeed1-b.proxad.net!nnrp1-2.free.fr!not-for-mail Date: Thu, 16 Mar 2023 00:49:46 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: 0!=1 ? Content-Language: fr Newsgroups: fr.sci.maths References: <turdrh$naru$1@dont-email.me> <tusrn5$v1lf$1@dont-email.me> <tuss29$1dfo$1@cabale.usenet-fr.net> <tusvf0$vs65$1@dont-email.me> <tusvt2$1i19$1@cabale.usenet-fr.net> <tut05s$vs65$2@dont-email.me> <tut09u$vs65$3@dont-email.me> <tut1em$1079d$1@dont-email.me> From: Michel Talon <talon@niobe.lpthe.jussieu.fr> In-Reply-To: <tut1em$1079d$1@dont-email.me> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Lines: 64 Message-ID: <6412599a$0$3011$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 16 Mar 2023 00:49:46 CET NNTP-Posting-Host: 88.161.173.7 X-Trace: 1678924186 news-1.free.fr 3011 88.161.173.7:27936 X-Complaints-To: abuse@proxad.net Bytes: 2946 Le 15/03/2023 à 19:06, Dominique a écrit : > > Et je résous mon énigme arithmétique du premier coup 😄 En fait le programme python qui fait la même chose que le programme maxima est (avec l'ajout du timer): from math import factorial import time start_time = time.time() result=False cpt=1 while not result: nb=str(cpt) nb1=[int(x) for x in nb] nb2=0 for i in nb1: nb2+=factorial(i) if nb2==cpt: print(cpt) if cpt==100000: result=True cpt += 1 print("--- %s seconds ---" % (time.time() - start_time)) Ce qui donne: >>> 1 2 145 40585 --- 0.3823738098144531 seconds --- Il est donc *beaucoup* plus rapide que le programme maxima. Ce qui facilite beaucoup les choses c'est la possibilité de convertir le nombre en string et d'itérer sur les chiffres nb1=[int(x) for x in nb] Je découvre juste qu'il existe une possibilité similaire avec maxima: (%i1) subst("+","[", map("!",map(parse_string,sexplode(string(40585))))); (%o1) 40585 Ici string(n) convertit n en string, sexplode crée une liste des chiffres, parse_string convertit chaque chiffre en nombre, et on ajoute la factorielle. On obtient une liste de factorielles qu'on convertit en somme par le subst. C'est donc exactement ce que tu fais. Le programme équivalent au tien est donc: (%i2) for n from 1 thru 100000 do if (n=subst("+","[", map("!",map(parse_string,sexplode(string(n)))))) then print(n); 1 2 145 40585 (%o2) done (%i3) time(%); (%o3) [5.116] Il est clairement toujours beaucoup plus lent que le programme python. -- Michel Talon