LEX 'PRIMLX' * (c) Copyright PPC Paris 1986 ID #E1 MSG 0 POLL 0 POP1N EQU #0BD1C Pop N È tester dans A TST12A EQU #0D476 Teste 2 nombres È 12 * chifres virgule flottante DV2-12 EQU #0C4A8 Divise ... CLRFRC EQU #0C6F4 <=> INT et carry levÅ si * FP=0 FLTDH EQU #1B223 12 chifres dÅcimal * flottant -> HEXA dans A(A) HDFLT EQU #1B31B Le contraire, de A(A) * dans A MPY EQU #0ECBB A*C en HEXA HXDCW EQU #0ECB4 C(W) HEXA -> dÅcimal FLOAT EQU #1B322 Entier dÅcimal cadrÅ È * droite -> 12 chiffres * flottant dans A(W) FNRTN1 EQU #0F216 Retour ENTRY PRM CHAR #F KEY 'PRIM' TOKEN 30 ENDTXT NIBHEX 811 PRM GOSBVL POP1N R0=A N sauvÅ en R0 C=0 W PrÅpare D, diviseur È * tester R1=C D -> R1 P= 2 Divisible par 2 ? GOSUB TEST P= 1 ... par 3 ? GOSUB TEST P= 2 ... par 5 ? GOSUB TEST P= 2 Etc ... GOSUB TEST BCL A=R1 DÅbut test primalitÅ GOSBVL FLTDH C=0 W C=A A D en HEXA dans C(A) ... A=C W ... et A(A) SETHEX GOSBVL MPY D^2 GOSBVL HXDCW GOSBVL FLOAT D^2 en dÅcimal dans A * pour le test C=R0 N -> C ?A=C W D^2=N ? GOYES F3 ...oui : N carrÅ parfait P= 4 Test > GOSBVL TST12A D^2>N ? GOC FIN2 ...oui : N premier P= 4 Boucle Åvitant les * multiples de 2, 3 et 5 * parmi les diviseurs GOSUB TEST P= 2 GOSUB TEST P= 4 GOSUB TEST P= 2 GOSUB TEST P= 4 GOSUB TEST P= 6 GOSUB TEST P= 2 GOSUB TEST P= 6 GOSUB TEST Fin boucle GOTO BCL F3 GOTO FIN3 Saut intermÅdiaire ( GOC * limitÅ È 128 quartets dans * chaque sens ) FIN2 C=R0 Retourne le premier ( gag * interne... ) diviseur * trouvÅ GOVLNG FNRTN1 TEST C=0 W Test de divisibilitÅ C=P 0 R2=C P -> C(0) A=R1 GOSBVL FLTDH D -> HEXA C=A A A=0 W A=C A Ancien D dans A(A) C=R2 A=A+C A Nouveau D GOSBVL HDFLT D en dÅcimal flottant * pour sauvegarde R1=A A=R0 N -> A C=R1 D -> C GOSBVL DV2-12 A/C et rÅsultat en 15 * chiffres sur A-B GOSBVL CLRFRC LÉve le carry s'il n'y a * pas de FP RTNNC Retour si FP#0 ( N non * divisible par D ) FIN1 C=RSTK Pop le GOSUB en attente FIN3 C=R1 Retourne N, nombre premier GOVLNG FNRTN1 END