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