% Time-stamp: <2019-08-07 10:59:31 administrateur> % Création : 2019-05-20T11:51:49+0200 \ExplSyntaxOn \cs_new:Nn \__yh_ecrire_nombre:n { \(\np{\int_to_arabic:n{ #1 }}\) } \cs_new:Nn \yh_impair_est_premier:nT { \bool_set_true:N \yh_continue_bool \bool_set_true:N \yh_est_premier_bool \int_set:Nn \l_tmpa_int {1} % FIN INITIALISATION \bool_do_while:Nn \yh_continue_bool { % BOUCLE `TANTQUE' % INCRÉMENTATION \int_add:Nn \l_tmpa_int { 2 } \bool_if:nTF { % TEST de divisibilité \int_compare_p:nNn { \int_mod:nn {#1} { \l_tmpa_int } } = { 0 } } { % SI VRAI \bool_set_false:N \yh_continue_bool \bool_gset_false:N \yh_est_premier_bool } { % SI FAUX \int_compare:nNnT { \l_tmpa_int * \l_tmpa_int } > { #1 } { \bool_set_false:N \yh_continue_bool } } } % FIN DU SI ET FIN DE LA BOUCLE \bool_if:nT {\yh_est_premier_bool} {#2} } \cs_new:Nn \yh_ecrire_separateur:n { } \cs_new:Nn \yh_ecrire_si_premier:n { \yh_impair_est_premier:nT { #1 } { \yh_ecrire_separateur:n { #1 } \__yh_ecrire_nombre:n { #1 } } } \NewDocumentCommand { \ListePremiers } { m } { \group_begin: % INITIALISATION \int_new:N \l_compteur_int \int_new:N \l_nombre_requis \int_set:Nn \l_compteur_int { 2 } \int_set:Nn \l_nombre_requis { #1 } \cs_set:Nn \yh_ecrire_separateur:n { \int_compare:nNnTF { ##1 } < { \l_nombre_requis - 1} {,~} {~et~} } % LES DEUX PREMIERS NOMBRES PREMIERS NE SONT PAS CALCULÉS \__yh_ecrire_nombre:n {2} \yh_ecrire_separateur:n {1} \__yh_ecrire_nombre:n {3} % PRÉPARATION DE LA BOUCLE, \l_tmpb_int EST LE CANDIDAT À TESTER \int_set:Nn \l_tmpb_int { 3 } % BOUCLE `TANT QUE' \int_while_do:nNnn { \l_compteur_int } < { \l_nombre_requis } { \int_add:Nn \l_tmpb_int { 2 } \yh_impair_est_premier:nT { \l_tmpb_int } { \yh_ecrire_separateur:n { \l_compteur_int } \__yh_ecrire_nombre:n{ \l_tmpb_int } \int_incr:N \l_compteur_int } } % ON FAIT LE MÉNAGE AVANT DE SORTIR \cs_undefine:N \l_compteur_int \cs_undefine:N \l_nombre_requis \group_end: } \ExplSyntaxOff %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: