La Question (anticipée) du Dimanche 13 Mars 2022

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par Schraf »

@C.Ret : Sur HP-50g, lorsque je fais 220313 DIVIS, j'obtiens la liste non ordonnée { 1 29 71 2059 107 3103 7597 220313}. C'est pour ça que j'ai pensé utiliser la "macro" CL. (compression logique) que je suis en train de regarder dans un autre fil de discussion. Là où j'ai été (très) nul en maths :oops: :oops: , c'est mon calcul "Nombre / Liste diviseurs" qui n'est autre que la liste inversée !!

Finalement, pour HP-49/50g ça donne ton code où j'ajoute juste ABS :

Code : Tout sélectionner

« DIVIS DUP REVLIST SWAP - 2 / ABS 1 OVER SIZE 2 / SUB »
@zpalm : Dommage, pas de UNION sur HP-50g mais traduction en APL qui a bien union ∪ mais pas de DIVIS, donc j'ai créé la liste des entiers 1 ... ⍵ et je n'ai gardé que ceux où la division tombe juste 0=n|⍵. Le |, en plus d'être le modulo, signifie aussi valeur absolue. Avec 20220313 on aura le droit à un dépassement de capacité WS FULL, du moins sur le site que j'ai mis en lien.

Code : Tout sélectionner

QDD ← {2÷ ⍨ ∪ | (⌽l) - l ← (0 = n|⍵) / n ← ⍳⍵}
QDD 220313
110156 3784 1516 976
Pour la partie mathématique que @C.Ret détaillera sûrement, l'idée pour trouver les "n" tels que n² + N soit un carré est :

n² + N = p²
N = p² - n² = (p + n)(p - n) # identité remarquable

On cherche donc à écrire N sous la forme d'un produit de 2 nombres. Toutes les possibilités sont données par :

N = A × (N ÷ A) où A est un diviseur de N

Pour éviter d'avoir les combinaisons en double (Par exemple 15 = 3 × 5 = 5 × 3), on peut imposer A ≥ rac(N) et on aura dans ce cas toujours A ≥ N ÷ A.

Si bien que : p + n = A et p - n = N ÷ A puisque p + n est toujours plus grand que p - n

On en déduit par soustraction que : n = (A - N ÷ A) / 2 = (A² - N) / (2A)

Si la machine à la possibilité de récupérer la liste L des diviseurs de N, une boucle pour A ≥ rac(N) et A ∊ L donnera les différentes valeurs de n, sinon il faudra également tester si A divise bien N.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par C.Ret »

Oui, Eric, c'est bien ce type de résolution que j'ai utilisé.
Il est tard, je posterai demain mes explications que j'ai agrémentées d'illustrations graphiques; j'ai trouvé le schéma de marge fort bien fait . Ce type de graphique permet de visualiser aisément quelques astuces qui explique mon algorithme.


Depuis hier soir, la question de zpalm concernant les solutions pour (n²+14725) que donne mon HP-71B n'a pas arrêter de générer une myriade d'algorithmes utilisant ou non l'instruction PRIM de la ROM JPC.

J'ai enfin établi une version fonctionnelle. A ma grande surprise, malgré la complexité de son principe de fonctionnement, elle donne les résultats très rapidement :
Temps indiqué en seconde décimale (s.ss")
Temps indiqué en seconde décimale (s.ss")
QDD-220313- HP71C (solutions).gif (9.52 Kio) Vu 3100 fois

Quand au code , vous reconnaitrez le tronc principal identique aux versions que j'ai publiées dans mon post précédent avec la boucle de recherche WHILE @ ... PRIM(C/P) ... @ END WHILE parcourant les facteurs et la partie finale utilisant le dernier facteur premier C/P.
Les sous-programmes d'affichage sont aussi identiques mais ont été déplacé aux lignes 30 et 32.

La principale nouveauté est le sous-programme aux lignes 20 à 26 qui compose la liste des diviseurs au fur et à mesure de l'arrivé des facteurs fournis par le programme principal. L'astuce réside dans le fait que les facteurs multiples arrivent successivement. Pour les détecter, le registre L mémorise le dernier facteur ajouté ainsi, l'ajout des diviseurs à la liste se fait différemment selon que le facteur F est identique ou non à celui précédemment traité.
Lorsqu'un nouveau facteur F (donc diffèrent de L) se présente, les nouveaux diviseurs sont calculés en effectuant les produits avec les diviseurs déjà dans la liste. Initialement la liste contient uniquement le facteur 1. Le registre J mémorise la position "butoir" de la liste afin que les produits ne se fasse qu'avec les ancien diviseurs, pas ceux que l'on vient d'ajouter.
Ce registre sert aussi lors de l'arrivé d'un facteur multiple (F=L). Dans ce cas les produits ne sont effectué qu'à partir de la position "butoir" du précèdent facteur F.

La liste obtenue est comme la liste produite par l'HP-50g, elle n'est pas entièrement triée, uniquement par tronçons correspondant à chaque facteur premier simple ou multiple.

Chaque produit donne un nouveau diviseur, si ce nouveau diviseur est dans la première partie de la liste (diviseurs inférieurs ou égaux à la racine carrée) alors il est ajouté à la liste. Il est alors immédiatement utilisé pour calculer une solution, N est incrémenté et la solution affichée.
Les diviseurs trop grands ne sont pas conservés. On notera l'utilisation de RES qui renvoi le résultat du dernier calcul, à savoir le produit F*D(I)

Afin de gagner du temps, la liste des diviseurs n'est pas complète (seuls les diviseur inférieurs sont mémorisés) et n'est que partiellement triée (les tronçons vaguement dans l'ordre proviennent du fait que PRIM donne les facteurs par ordre croissant.
Une seule position "butoir" n'est retenue (registre J), car PRIM() donne les facteurs multiples de façon regroupée.
QDD-220313- HP71C (code).gif
QDD-220313- HP71C (code).gif (9.06 Kio) Vu 3100 fois
Exemple construction des diviseurs et solutions avec 14725 :

Code : Tout sélectionner

PRIM Facteurs      LISTE Diviseurs                      Affichage solutions
14725  1           1                                      7362      
14725  5           * 5                                    1470
2945   5      Idt  _ *| 25                                282
589    19          *      | 19                            378
                     *    |    95                         30 
                         *|       (475)                   ()
31     0   31      *             | 31                     222
                     *   *   *  *|    (155 775 589 2945)  ()
                   1 5, 25, 19 95, 31 (   trop grands  )  NB: 6 (1.64")



Bon, j'ai eu du mal à concrétiser cet algo, je n'ai plus le temps de poster mes schémas et formules de résolution. mais Eric Schraf a bien résumé l'essentiel. Il manque juste quelques petits détails croustillants qui font faire des économies... :)
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par zpalm »

Après le MPO 97, j'ai soumis cette QDD à la sagacité de mon Sharp PC-1300S avec ce programme dérivé de celui de la HP-10C (pas de MOD sur le PC-1300) mais avec quelques ajustements:
Image
La petite note de musique sur la ligne 03 avant le END est un Beep pour signaler la fin du programme.

Pour 20220313 ce programme s’exécute en moins de 22 minutes soit deux fois plus vite que la HP-10C:
  • 00'01'' 10110156
  • 00'05'' 532104
  • 00'49'' 61944
  • 15'09'' 1716
  • 21'58'' Beep, plus de solutions
Il gère correctement le cas ou le nombre de départ est un carré parfait qui admet 0 comme solution. Par exemple pour 81 il retourne: 40, 12 et 0

Les impressions sur le papier électrostatique du PC-1300S ne sont pas un modèle de lisibilité: gris foncé sur gris clair, il faut un bon éclairage...
Image
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par C.Ret »

zpalm a écrit : 17 mars 2022 22:49La petite note de musique sur la ligne 03 avant le END est un Beep pour signaler la fin du programme.
Le petit détail qui donne une idée du génie des concepteurs de cette machine et qui fait que tout le monde regrette de ne pas l'avoir !

En plus, j'ai vu les photo, la voir fonctionner doit être un véritable spectacle son et lumière !

Le language de programmation fait déjà penser à de l' AER ! Génial :)
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par Schraf »

@Zpalm : trop trop trop sympa cette machine !

Le même programme en moins fun (mais plus rapide d'exécution, j'essaie de me consoler) sur les Texas de TI-80 à la TI-83 PCE d'aujourd'hui

PrgmTi.png
PrgmTi.png (11.9 Kio) Vu 3044 fois

20 secondes pour afficher toutes les solutions
20 secondes pour afficher toutes les solutions
20220313.png (8.35 Kio) Vu 3044 fois
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par zpalm »

C.Ret a écrit : 18 mars 2022 05:59 En plus, j'ai vu les photo, la voir fonctionner doit être un véritable spectacle son et lumière !
Schraf a écrit : 18 mars 2022 11:20 @Zpalm : trop trop trop sympa cette machine !
:D voici une petite video la montrant en action:
Image
.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par Marge »

Excellente vidéo qui devrait encore faire grimper le prix de cette merveille. Quelle rapidité d’impression !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par C.Ret »

Marge a écrit : 15 mars 2022 16:10Le résultat est imprimé sur un peu plus de 2 cm, C.Ret. ;)
Ah! Zut ! Elle consomme un peu de papier ta machine ! Remarque, je viens de mesurer, mon HP-82240A ne fait pas mieux ! ;)

Heureusement que je n'ai ps demandé de chercher les entiers positifs n tels que (n²+45045) soit un carré parfait !
QDD - 45045.jpg
QDD - 45045.jpg (13.1 Kio) Vu 2968 fois

Sinon, j'aime bien l'approche de Marge pour résoudre ce problème, même si dans un premier temps, j'ai abordé le problème de la même manière que Scharf. Ce qui m'a fait un peu cogiter et j'ai finalement trouver une illustration qui illustre bien que les deux méthodes.

Cette Question Du Dimanche consistait donc à trouver les entiers positifs n tels qu'il existe un entier g tel que (n²+220313)=g² et alternativement pour étrenner les systèmes les plus robustes trouver les entiers positifs n' tels que (n'²+20220313)=g'².

De l'équation initiale on déduit assez directement la relation suivante 220313 = g² - n² (1)

Que l'on s'empresse de transformer selon l'identité remarquable en 220313 = (g - n)(g + n) (2)

Donc trouver les solutions n revient à énumérer les entiers a et b tels que 220313 = a × b (3)
avec a≤b solutions du système Image (4)

La relation (3) indique donc que les couples (a,b) sont des diviseurs conjugués de la constante 220313 (alternativement 20220313). Ils sont conjugués, car b = 200313 / a.

Trouver les solutions n revient donc à énumérer les couples (a,b) de diviseurs conjugués de 220313 (alternativement 20220313) avec a≤b.
On peut donc optimiser la recherche en se limitant à la recherche des entiers diviseurs a plus petit ou égaux à √220313.

Par ailleurs, la relation (3) nous indique que comme 220313 (alternativement 20220313) est impair, alors le produit a×b l'est aussi et donc nécessairement a et b sont impairs.
On peut donc, comme l'a fait spontanément zpalm dans son code, se limiter à la recherche des entiers impairs diviseurs de 200313 (alternativement 20220313).

Mais alors, pourquoi les codes de C.Ret ou Scharf qui utilisent les fonctions intégrées à leur machine donnant directement la liste des diviseurs ne font-ils pas de test de parité ?
Parce que la nature est bien faite, si la constante c est impair, elle ne peut être divisée par deux et elle n'admet donc aucun diviseurs pairs !
Voilà une vérification inutile que nos codes évitent bien innocemment.

D'où d'ailleurs le code que j'ai dû tapoter sur HP-41C pour les solutions de (n²+20220313) qui perd un nombre non négligeable de pas afin de s'assurer que la recherche avance de deux en deux mais surtout commence avec une 'racine' rrrr impaire :

Code : Tout sélectionner

 01►LBL "QDD"
CLRG  ENTER^  SQRT  ENTER^  ENTER^ -2  MOD  1  +  -  2 E-5  +

 14►LBL 01
RCL Y  RCL Y  INT  MOD  X=0?  XEQ 02  RDN  DSE X  GTO 01
"N=" ARCL 00  TONE 5  AVIEW  RTN

 29►LBL 02
X<> L  ST/ T  R^  -2  /  ISG 00  PSE  STO IND 00  VIEW X  END
Comme un compteur au format 1.rrr02 pour un ISG X allant de deux en deux ne convient pas (car la racine 20220313 fait ~4496.7 ), l'idée est de construire un compteur au format rrrr.ooo02 et d'utiliser un DSE X à la place. Mais il faut être sûr que rrrr est impair.


La résolution du système d'équation (4) nous donne directement, pour chaque couple (a,b) de diviseurs conjugués la valeur n solution de 2×n = b - a (5)

Et c'est là, qu'en voyant la figure de marge, j'ai dû un peu cogiter !

Quelle est la relation entre son schéma qui illustre bien le problème : on cherche à former un carré qui contient le carré et la constante 220313 (alternativement 20220313).

Le système d'équation (4) donne bien la relation g = a + ndirectement visible sur le schéma de marge. Il suffit pour cela de réécrire g - n = a en g - n + n = a + n.

Mais, où se cache le second terme celui concernant le plus grand diviseur : g + n = b ?

Il m'a fallu un peu de temps pour comprendre qu'initialement la constante c (alternativement 220313 ou 20220313) est en fait un rectangle de coté a et b.
Et oui, c'est dit dans la relation (3), on a 220313 = a × b (alternativement 20220313 = a × b

Sur la figure ci-dessous il s'agit du rectangle bleu:
QDD-20220313 (non assemblés).png
QDD-20220313 (non assemblés).png (28.77 Kio) Vu 2980 fois
Le rectangle bleu doit être découpé en trois morceaux afin de venir se ranger dans le grand carré le long du carré : on a donc bien b = n + a + n = a + 2×n c'est à dire exactement la relation (5).

Toutes ces manipulation un peu abstraites sont donc clairement illustrées par ce second schéma où les trois parties de la constante 220313 (alternativement 20220313) sont regroupées dans le grand carré .
QDD-20220313(assemblés).png
QDD-20220313(assemblés).png (31.87 Kio) Vu 2980 fois
Mais alors, pusiqu'il s'agit de géométrie, pourquoi ne pas proposer une solution sur l'outil géométrique d'une TI 92 II ?
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Chris
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 256
Enregistré le : 20 oct. 2007 19:01

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par Chris »

Vraiment un grand bravo pour les problèmes que vous publiez, vos interventions pédagogiques pour les résoudre, le temps que vous passez à programmer ces pockets avec des trésors d'ingéniosité pour limiter la place en mémoire !

Je ne participe pas à ces jeux (par manque de temps et surtout par manque de culture mathématique), mais je vous lis avec beaucoup de plaisir et d'aucun comme moi qui prennent le temps de vous lire en ressortent enrichi.

Et quel plaisir de vous voir entretenir la mémoire de ces pockets en faisant le mieux pour elles : continuer à les utiliser, qu'importe l'année de leur sortie ou leur avancé technologique.
En un mot : vous êtes les gardiens de la mémoire de nos pockets.

Et ces remerciements s'adressent bien sûr à tous les fils de discussion de la section Pocket.

Vous êtes mes héros !

Merci et surtout continuez comme cela !
HP : 11C 17BII 28S 48SX 50G 71B LX100
Sharp : PC-1403 PC-1600 PC-G850V
TI : TI-74
FLISZT
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 655
Enregistré le : 09 mars 2022 19:14

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par FLISZT »

Chris a écrit : 19 mars 2022 11:19 Je ne participe pas à ces jeux (par manque de temps et surtout par manque de culture mathématique), mais je vous lis avec beaucoup de plaisir et d'aucun comme moi qui prennent le temps de vous lire en ressortent enrichi.
Chris,
À titre personnel je suis loin d'avoir une culture mathématique hors paire.
Beaucoup ici en connaissent vraiment bien plus que moi et côté programmation, on fait mieux également.

Certains MPO (les 93, les 96…) ne nécessitent aucunes connaissances en maths.
Idem pour La question de l'équinoxe de printemps 2022.

Alors si tu as le temps, et qui plus est, si tu as un "pocket", une "programmable", voire même un IBM 36… play with us! :D
Bruno
Sanyo CZ-0124 ? TI-57 ? HP-15C ? Canon X-07 + XP-140 Monitor Card ? HP-41CX ? HP-28S ? HP-50G ? HP-50G
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: La Question (anticipée) du Dimanche 13 Mars 2022

Message par C.Ret »

zpalm a écrit : 13 mars 2022 23:57 Du coup je me suis fait plaisir, et voici le listing complet de mon programme pour la HP-10C:


HP-10C_b.png

Il est facilement adaptable sur la HP-25 qui a plus d'instructions de tests ce qui permet de gagner un pas de programme.

EDIT: j'ai remplacé R/S au pas 08 par GTO 00 pour une meilleure fin de programme permettant d'enchainer avec l'entrée d'une nouvelle valeur suivie de R/S pour lancer l'exécution.
Il doit y avoir moyen d'encore un peu le raccourcir; pour indiquer une voie possible, je donne ci-dessus l'idée maitresse appliquée à une HP-15C:
QDD-20220313-HP15C.png
QDD-20220313-HP15C.png (30.36 Kio) Vu 2908 fois
A essayer pour lister les entiers positifs n tels que (n²+883575) soit un carré parfait.
Mais sans utiliser une des imprimantes de marge, car il va y avoir plus de 5 cm !
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Répondre

Retourner vers « Tous les Pockets »