Sujet : Re: Le calcul de la racine carré... pour des nuls :)
De : samuel.devulder (at) *nospam* laposte.net.inalid (Samuel Devulder)
Groupes : fr.sci.mathsDate : 10. Nov 2024, 03:40:46
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <67301d2f$0$12913$426a34cc@news.free.fr>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13
User-Agent : Mozilla Thunderbird
Le 09/11/2024 à 19:39, Michel Talon a écrit :
Voici le programme:
(defun print-bizarre-squares (N str)
(let ((k 1) (l 10))
(dotimes (i N 'done)
(let ((j (* i i)))
(when (<= l j)
(incf k)
(setq l (* 10 l)))
;; Here 10^(k-1) <= j < 10^k, j has k digits
(if (evenp k) (test-if-bizarre i j (expt 10 (/ k 2)) str))))))
(defun test-if-bizarre (i j l str)
(multiple-value-bind (a b) (floor (/ j l))
(if (= i (+ a (* l b))) (format str " ~7d ~d ~%" i j))))
(defparameter N (expt 10 7)) ; 10^7
(with-open-file (str "list-of-bizarre" :direction :output :if- exists :supersede)
(time (print-bizarre-squares N str)))
Quelque part c'est moyennement lisible(*) par rapport à cet version plus "naturelle" du point de vue algorithmique :
----8<-------------------------------------
i = 0
n = 1
p = 1
q = 10
repeat
n = n + 1
if n>=q then
p = q
q = q*10
end
m = n*n
a = math.floor(m / q)
b = math.floor(m % q)
if a+b==n and a>=p then
i = i + 1
print(i, n, m)
end
until n > 1E7
----8<-------------------------------------
Qui est directement interprétable par Lua et qui donne la même liste de 45 nombres en même pas deux secondes dans un browser web.
A noter que la condition "a>=p" évite de tomber sur des nombres où l'on a besoin du zero implicite devant m=n² pour avoir un découpage plus naturel. Si on retire cette condition, on tombe sur ces 10 solutions supplémentaires non trouvé par le programme Lisp amenant à un total de 55 carrés bizarres <= 1E7.
1 297 88209 (297 = 088 + 209)
2 2223 4941729 (2223 = 0494 + 1729)
3 2728 7441984 etc.
4 17344 300814336
5 22222 493817284
6 142857 20408122449
7 148149 21948126201
8 181819 33058148761
9 187110 35010152100
10 208495 43470165025
Pour expérimenter par soi-même:
https://onecompiler.com/lua/42xp2gahesam.
____
(*) lisp = Lost In Stupid Parentheses
= Lots of Irritating Superfluous Parentheses