/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T U D E   D E   L A   C O N J E C T U R E   D E   G O L D B A C H  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande (inspiree du programme                                                                          */
/*                  'v $xtc/Goldbach.01$c') teste la conjecture                                                                      */
/*                  de Goldbach et edite un certain nombre de                                                                        */
/*                  valeurs utiles.                                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Je rappelle le 20250214174042 que pour                                                                         */
/*                  simplement lister les nombres premiers,                                                                          */
/*                  il suffira d'utiliser :                                                                                          */
/*                                                                                                                                   */
/*                                      $xci/valeurs_Goldbach$X                 premiere=1 derniere=N                             \  */
/*                                                                              editer_nombres_premiers=VRAI                      \  */
/*                                                                              calculer_decompositions=FAUX                         */
/*                                                                                                                                   */
/*                  ou 'N' designe le nombre de nombres                                                                              */
/*                  premiers que l'on souhaite calculer...                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_Goldbach$K' :                                                                                      */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20121013082435).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PRAGMA_CPP_____AUTORISER_LE_GooF
#define   GENERER_LES_GET_ARGUMENTS_DE_CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS
                                        /* Introduit le 20121011101232...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_MINI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"

#define   CALCULER_LES_DECOMPOSITIONS_DES_NOMBRES_PAIRS                                                                                 \
                    VRAI                                                                                                                \
                                        /* Pour verifier la conjecture de Goldbach ('VRAI') ou bien uniquement eventuellement ne     */ \
                                        /* faire qu'editer les nombres premiers si 'IL_FAUT(editer_la_liste_des_nombres_premiers)'   */ \
                                        /* ('FAUX'). Ceci a ete introduit le 20131201102246...                                       */

#define   PREMIER_NOMBRE_PAIR_A_TESTER                                                                                                  \
                    QUATRE                                                                                                              \
                                        /* Premier nombre pair a tester correspondant a la Conjecture de Goldbach...                 */
#define   DERNIER_NOMBRE_PAIR_A_TESTER                                                                                                  \
                    ZERO                                                                                                                \
                                        /* Dernier nombre pair a tester correspondant a la Conjecture de Goldbach (introduit         */ \
                                        /* le 20131208173156). La valeur par defaut permet de forcer une valeur egale au dernier     */ \
                                        /* nombre premier calcule...                                                                 */

#define   VALEUR_A_NE_PAS_DEPASSER_POUR_LES_NOMBRES_PREMIERS                                                                            \
                    PETIT_INFINI                                                                                                        \
                                        /* Valeur a ne pas depasser pour nombres premiers (introduite le 20221021172426 pour         */ \
                                        /* generer 'v $xiirv/GOLD.F2'...).                                                           */

#define   DISTANCE_ENTRE_DEUX_NOMBRES_PREMIERS_JUMEAUX                                                                                  \
                    DEUX                                                                                                                \
                                        /* Distance entre deux nombres premiers jumeaux (introduite le 20150324160607).              */

#define   EDITER_LA_LISTE_DES_NOMBRES_PREMIERS                                                                                          \
                    FAUX
#define   TABULATION_DES_NOMBRES_PREMIERS                                                                                               \
                    ZERO
#define   MARQUER_LE_DEUXIEME_NOMBRE_PREMIER_D_UN_COUPLE_DE_NOMBRES_PREMIERS_JUMEAUX                                                    \
                    FAUX
#define   EDITER_TOUTES_LES_DECOMPOSITIONS                                                                                              \
                    VRAI
#define   PLUTOT_QU_EDITER_LES_NOMBRES_PREMIERS_EDITER_LEUR_RANG                                                                        \
                    FAUX
#define   EDITER_LE_PRODUIT_DE_DEUX_NOMBRES_PREMIERS                                                                                    \
                    FAUX
#define   EDITER_SEQUENTIELLEMENT_LES_DECOMPOSITIONS                                                                                    \
                    VRAI
#define   IGNORER_LES_COUPLES_COMMUTES_DUS_A_LA_COMMUTATIVITE_DE_L_ADDITION                                                             \
                    VRAI
#define   REMPLACER_LES_NOMBRES_PREMIERS_PAR_LEUR_INDEX                                                                                 \
                    FAUX
                                        /* Controle des differentes editions. La tabulation des nombres premiers a ete introduite le */
                                        /* 20170309101222, la valeur par defaut ('ZERO') garantissant la compatibilite anterieure.   */
                                        /* L'edition du produit des deux nombres premiers a ete introduite le 20200930142246.        */

#define   BORNE_INFERIEURE_DES_NOMBRES_PREMIERS                                                                                         \
                    ZERO
#define   BORNE_SUPERIEURE_DES_NOMBRES_PREMIERS                                                                                         \
                    INFINI
                                        /* Introduit le 20250214174042 afin de tester la conjecture de Legendre pour laquelle on     */
                                        /* utilisera :                                                                               */
                                        /*                                                                                           */
                                        /*                                     2                                                     */
                                        /*                  BorneInferieure = N                                                      */
                                        /*                                                                                           */
                                        /*                                         2                                                 */
                                        /*                  BorneSuperieure = (N+1)                                                  */
                                        /*                                                                                           */
                                        /* 'N' designant un entier quelconque...                                                     */

#include  xci/valeurs.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/valeurs.02.I"

#define   DERNIER_NOMBRE_PAIR_POSSIBLE                                                                                                  \
                    PAR0(NOMBRE_PREMIER(INDEX_DU_DERNIER_NOMBRE_PREMIER))                                                               \
                                        /* Dernier nombre pair a tester possible en focntion du dernier nombre premier calcule...    */

#define   PREMIER_NOMBRE_PREMIER                                                                                                        \
                    VERITABLE_PREMIER_NOMBRE_PREMIER                                                                                    \
                                        /* Premier nombre premier, qui est pair (introduit ici le 20130112101922) !                  */
#define   NOMBRE_DE_NOMBRES_PREMIERS                                                                                                    \
                    NBRE(premiere_image,derniere_image)                                                                                 \
                                        /* Nombre de nombres premiers...                                                             */

#include  xci/valeurs_Goldbach.01.I"
#include  xci/valeurs_Goldbach.02.I"
                                        /* Introduits le 20130110101548...                                                           */

#define   NOMBRE_PREMIER_1                                                                                                              \
                    COND(IL_FAUT(remplacer_les_nombres_premiers_par_leur_index),index1,nombre_premier_1)
#define   NOMBRE_PREMIER_2                                                                                                              \
                    COND(IL_FAUT(remplacer_les_nombres_premiers_par_leur_index),index2,nombre_premier_2)
                                        /* Le remplacement possible des nombres premiers par leur index lors des editions a ete      */
                                        /* introduit le 20221021134729...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T U D E   D E   L A   C O N J E C T U R E   D E   G O L D B A C H  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */

     DEFV(Logical,INIT(calculer_les_decompositions_des_nombres_pairs,CALCULER_LES_DECOMPOSITIONS_DES_NOMBRES_PAIRS));
                                        /* Pour verifier la conjecture de Goldbach ('VRAI') ou bien uniquement eventuellement ne     */
                                        /* faire qu'editer les nombres premiers si 'IL_FAUT(editer_la_liste_des_nombres_premiers)'   */
                                        /* ('FAUX'). Ceci a ete introduit le 20131201102246...                                       */

     DEFV(Int,INIT(premier_nombre_pair_a_tester,PREMIER_NOMBRE_PAIR_A_TESTER));
                                        /* Premier nombre pair a tester correspondant a la Conjecture de Goldbach (introduit         */
                                        /* sous cette forme en 'Int' et non plus seulement en '#define' le 20131203124313)...        */
     DEFV(Int,INIT(dernier_nombre_pair_a_tester,DERNIER_NOMBRE_PAIR_A_TESTER));
                                        /* Dernier nombre pair a tester correspondant a la Conjecture de Goldbach (introduit         */
                                        /* le 20131208173156). La valeur par defaut permet de forcer une valeur egale au dernier     */
                                        /* nombre premier calcule...                                                                 */

     DEFV(Int,INIT(valeur_a_ne_pas_depasser_pour_les_nombres_premiers,VALEUR_A_NE_PAS_DEPASSER_POUR_LES_NOMBRES_PREMIERS));
                                        /* Valeur a ne pas depasser pour nombres premiers (introduite le 20221021172426 pour         */
                                        /* generer 'v $xiirv/GOLD.F2'...).                                                           */

     DEFV(Int,INIT(index_du_premier_nombre_premier,INDEX_DU_PREMIER_NOMBRE_PREMIER));
                                        /* Index du premier nombre premier introduit le 20161019102237 afin de pouvoir eliminer 2    */
                                        /* qui est le seul nombre premier pair et qui s'il est ajoute a d'autres nombres premiers    */
                                        /* (sauf lui-meme...) donne alors des nombres impairs (ce qui est ennuyeux si l'on travaille */
                                        /* sur la conjecture de Goldbach...                                                          */

     DEFV(Int,INIT(distance_entre_deux_nombres_premiers_jumeaux,DISTANCE_ENTRE_DEUX_NOMBRES_PREMIERS_JUMEAUX));
                                        /* Distance entre deux nombres premiers jumeaux (introduite le 20150324160607).              */

     DEFV(Logical,INIT(editer_la_liste_des_nombres_premiers,EDITER_LA_LISTE_DES_NOMBRES_PREMIERS));
     DEFV(Int,INIT(tabulation_des_nombres_premiers,TABULATION_DES_NOMBRES_PREMIERS));
     DEFV(Logical,INIT(marquer_le_deuxieme_nombre_premier_d_un_couple_de_nombres_premiers_jumeaux
                      ,MARQUER_LE_DEUXIEME_NOMBRE_PREMIER_D_UN_COUPLE_DE_NOMBRES_PREMIERS_JUMEAUX
                       )
          );
     DEFV(Logical,INIT(editer_toutes_les_decompositions,EDITER_TOUTES_LES_DECOMPOSITIONS));
     DEFV(Logical,INIT(plutot_qu_editer_les_nombres_premiers_editer_leur_rang,PLUTOT_QU_EDITER_LES_NOMBRES_PREMIERS_EDITER_LEUR_RANG));
     DEFV(Logical,INIT(editer_le_produit_de_deux_nombres_premiers,EDITER_LE_PRODUIT_DE_DEUX_NOMBRES_PREMIERS));
     DEFV(Logical,INIT(editer_sequentiellement_les_decompositions,EDITER_SEQUENTIELLEMENT_LES_DECOMPOSITIONS));
     DEFV(Logical,INIT(ignorer_les_couples_commutes_dus_a_la_commutativite_de_l_addition
                      ,IGNORER_LES_COUPLES_COMMUTES_DUS_A_LA_COMMUTATIVITE_DE_L_ADDITION
                       )
          );
     DEFV(Logical,INIT(remplacer_les_nombres_premiers_par_leur_index,REMPLACER_LES_NOMBRES_PREMIERS_PAR_LEUR_INDEX));
                                        /* Controle des differentes editions...                                                      */
                                        /*                                                                                           */
                                        /* Le 20121112092704 'prendre_en_compte_la_commutativite_de_l_addition' a ete change en      */
                                        /* 'ignorer_les_couples_commutes_dus_a_la_commutativite_de_l_addition' plus explicite...     */
                                        /*                                                                                           */
                                        /* Le 20131204110949 'editer_toutes_les_decompositions' a ete introduit...                   */
                                        /*                                                                                           */
                                        /* La tabulation des nombres premiers a ete introduite le 20170309101222, la valeur par      */
                                        /* defaut ('ZERO') garantissant la compatibilite anterieure.                                 */
                                        /*                                                                                           */
                                        /* L'edition du produit des deux nombres premiers a ete introduite le 20200930142246.        */
                                        /*                                                                                           */
                                        /* L'edition de l'index des nombres premiers (plutot que les nombres premiers exu-memes)     */
                                        /* a ete introduite le 20221021134729...                                                     */

     DEFV(Int,INIT(borne_inferieure_des_nombres_premiers,BORNE_INFERIEURE_DES_NOMBRES_PREMIERS));
     DEFV(Int,INIT(borne_superieure_des_nombres_premiers,BORNE_SUPERIEURE_DES_NOMBRES_PREMIERS));
                                        /* Introduit le 20250214174042 afin de tester la conjecture de Legendre pour laquelle on     */
                                        /* utilisera :                                                                               */
                                        /*                                                                                           */
                                        /*                                     2                                                     */
                                        /*                  BorneInferieure = N                                                      */
                                        /*                                                                                           */
                                        /*                                         2                                                 */
                                        /*                  BorneSuperieure = (N+1)                                                  */
                                        /*                                                                                           */
                                        /* 'N' designant un entier quelconque...                                                     */

#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_I("premiere=""p=""D=",premiere_image);
                         GET_ARGUMENT_I("derniere=""d=""A=",derniere_image);
                                        /* On rappelle le 20131203123243 que :                                                       */
                                        /*                                                                                           */
                                        /*                  derniere-premiere+1                                                      */
                                        /*                                                                                           */
                                        /* donne le nombre de nombres premiers que l'on va calculer et exploiter. Si l'on souhaite   */
                                        /* "optimiser" cette valeur, on peut s'inspirer de 'v $xiirv/.GOLD.81.1.$U 20131203153623'.  */

                         GET_ARGUMENT_L("calculer_decompositions=""cd=",calculer_les_decompositions_des_nombres_pairs);
                                        /* Arguments introduits le 20131201102246...                                                 */

                         GET_ARGUMENT_I("premier_nombre_pair=""pnp=",premier_nombre_pair_a_tester);
                                        /* Arguments introduits le 20131203124313...                                                 */
                         GET_ARGUMENT_I("dernier_nombre_pair=""dnp=",dernier_nombre_pair_a_tester);
                                        /* Arguments introduits le 20131208173156...                                                 */

                         GET_ARGUMENT_I("valeur_maximale_nombres_premiers=""vmnp="
                                       ,valeur_a_ne_pas_depasser_pour_les_nombres_premiers
                                        );
                                        /* Arguments introduits le 20221021172426...                                                 */

                         GET_ARGUMENT_I("index_premier_nombre_premier=""ipnp=",index_du_premier_nombre_premier);
                                        /* Arguments introduits le 20161019102237...                                                 */

                         GET_ARGUMENT_I("distance_jumeaux=""dj=",distance_entre_deux_nombres_premiers_jumeaux);
                                        /* Arguments introduits le 20150324160607...                                                 */

                         GET_ARGUMENT_L("editer_nombres_premiers=""enp=",editer_la_liste_des_nombres_premiers);
                         GET_ARGUMENT_I("tabulation_nombres_premiers=""tnp=",tabulation_des_nombres_premiers);
                         GET_ARGUMENT_L("marquer_nombres_premiers_jumeaux=""mnpj="
                                       ,marquer_le_deuxieme_nombre_premier_d_un_couple_de_nombres_premiers_jumeaux
                                        );
                                        /* Arguments introduits le 20150324160607...                                                 */
                         GET_ARGUMENT_L("editer_decompositions=""ed=",editer_toutes_les_decompositions);
                                        /* Argument introduit le 20131204110949...                                                   */
                         GET_ARGUMENT_L("rang=""rg=",plutot_qu_editer_les_nombres_premiers_editer_leur_rang);
                                        /* Argument introduit le 20130111082637...                                                   */
                         GET_ARGUMENT_L("produit=""pr=",editer_le_produit_de_deux_nombres_premiers);
                                        /* Argument introduit le 20200930142246...                                                   */
                         GET_ARGUMENT_L("edition_sequentielle=""es=",editer_sequentiellement_les_decompositions);
                         GET_ARGUMENT_N("edition_parallele=""ep=",editer_sequentiellement_les_decompositions);
                                        /* Je rappelle le 20240101104722 que si l'on veut editer le nombre de decompositions il      */
                                        /* faut utiliser :                                                                           */
                                        /*                                                                                           */
                                        /*                  edition_parallele=VRAI                                                   */
                                        /*                                                                                           */
                                        /* Le nombre apparait alors en bout de ligne apres un "#"...                                 */
                         GET_ARGUMENT_L("ignorer_couples_commutes=""icc=""commutativite_addition=""commutativite=""ca="
                                       ,ignorer_les_couples_commutes_dus_a_la_commutativite_de_l_addition
                                        );
                         GET_ARGUMENT_N("conserver_couples_commutes=""ccc="
                                       ,ignorer_les_couples_commutes_dus_a_la_commutativite_de_l_addition
                                        );
                                        /* Arguments etendus le 20121112092704...                                                    */
                         GET_ARGUMENT_L("remplacer_nombres_premiers=""rnp=""index=",remplacer_les_nombres_premiers_par_leur_index);
                         GET_ARGUMENT_N("garder_nombres_premiers=""gnp=",remplacer_les_nombres_premiers_par_leur_index);
                                        /* Arguments introduits le 20221021134729...                                                 */

                         GET_ARGUMENT_I("borne_inferieure_nombres_premiers=""binp=",borne_inferieure_des_nombres_premiers);
                         GET_ARGUMENT_I("borne_superieure_nombres_premiers=""bsnp=",borne_superieure_des_nombres_premiers);
                                        /* Arguments introduits le 20250214174042...                                                 */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                         )
                    );

     Test(EST_IMPAIR(premier_nombre_pair_a_tester))
                                        /* Test introduit le 20131208173156...                                                       */
          Bblock
          PRINT_ERREUR("le premier nombre pair n'est pas pair");
          CAL1(Prer1("(il vaut %d ",premier_nombre_pair_a_tester));
          EGAL(premier_nombre_pair_a_tester,PAR0(premier_nombre_pair_a_tester));
          CAL1(Prer1("et %d sera utilise)\n",premier_nombre_pair_a_tester));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_la_liste_des_nombres_premiers))
          Bblock
          Test(IL_FAUT(marquer_le_deuxieme_nombre_premier_d_un_couple_de_nombres_premiers_jumeaux))
               Bblock
               Test(IFET(EST_IMPAIR(distance_entre_deux_nombres_premiers_jumeaux)
                        ,IFGT(distance_entre_deux_nombres_premiers_jumeaux,UN)
                         )
                    )
                    Bblock
                    PRINT_ATTENTION("une distance entre nombres premiers 'jumeaux' impaire et superieure a 1 n'a pas de sens");
                                        /* Message introduit le 20150324162229...                                                    */
                                        /*                                                                                           */
                                        /* En effet, la "distance" entre deux nombres premiers quelconques (et donc pas              */
                                        /* necessairement jumeaux) ne peut etre que paire (sauf entre 2 et 3) puisque les            */
                                        /* nombres premiers sont impairs (sauf 2...).                                                */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFLE(premiere_image,derniere_image))
          Bblock
          Test(IFGE(NOMBRE_DE_NOMBRES_PREMIERS,DEUX))
               Bblock
               DEBUT_DE_LA_GENERATION_DE_LA_LISTE_DES_NOMBRES_PREMIERS;
                                        /* Introduit le 20130110101548 sous cette forme...                                           */

               Test(IL_FAUT(editer_la_liste_des_nombres_premiers))
                    Bblock
                    DEFV(Int,INIT(nombre_premier_precedent,UNDEF));
                    DEFV(Int,INIT(le_nombre_premier_precedent_existe,FAUX));
                                        /* Introduit le 20150324160607...                                                            */
                    DEFV(Int,INIT(index,UNDEF));

                    DoIn(index,index_du_premier_nombre_premier,INDEX_DU_DERNIER_NOMBRE_PREMIER,I)
                         Bblock
                         Test(IFINoo(NOMBRE_PREMIER(index)
                                    ,borne_inferieure_des_nombres_premiers
                                    ,borne_superieure_des_nombres_premiers
                                     )
                              )
                                        /* Test introduit le 20250214182001...                                                       */
                              Bblock
                              Test(IL_FAUT(plutot_qu_editer_les_nombres_premiers_editer_leur_rang))
                                        /* Test introduit le 20130111082637...                                                       */
                                   Bblock
                                   CAL2(Prin2("NP(%d)=%d\n"
                                             ,index
                                             ,NOMBRE_PREMIER(index)
                                              )
                                        );
                                   Eblock
                              ATes
                                   Bblock
                                   Test(IL_FAUT(calculer_les_decompositions_des_nombres_pairs))
                                        Bblock
                                        CAL2(Prin0("NombrePremier="));
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   CAL2(Prin2("%*d",tabulation_des_nombres_premiers,NOMBRE_PREMIER(index)));
                                        /* La tabulation des nombres premiers a ete introduite le 20170309101222 afin de creer la    */
                                        /* page 'v $xiMd/NombresPremiers_10000$vv$m4'...                                             */

                                   Test(IL_FAUT(marquer_le_deuxieme_nombre_premier_d_un_couple_de_nombres_premiers_jumeaux))
                                        Bblock
                                        Test(EST_VRAI(le_nombre_premier_precedent_existe))
                                             Bblock
                                             Test(IFEQ(SOUS(NOMBRE_PREMIER(index),nombre_premier_precedent)
                                                      ,distance_entre_deux_nombres_premiers_jumeaux
                                                       )
                                                  )
                                                  Bblock
                                                  CAL2(Prin1(" jumeaux(%d)",distance_entre_deux_nombres_premiers_jumeaux));
                                        /* Edition introduite le 20150324160607...                                                   */
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  Eblock
                                             ETes
                                             Eblock
                                        ATes
                                             Bblock
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   CAL2(Prin0("\n"));

                                   EGAL(nombre_premier_precedent,NOMBRE_PREMIER(index));
                                   EGAL(le_nombre_premier_precedent_existe,VRAI);
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    EDoI
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IZLE(dernier_nombre_pair_a_tester))
                                        /* Test introduit le 20131208174720...                                                       */
                    Bblock
                    EGAL(dernier_nombre_pair_a_tester,DERNIER_NOMBRE_PAIR_POSSIBLE);
                    Eblock
               ATes
                    Bblock
                    Test(IFGT(dernier_nombre_pair_a_tester,DERNIER_NOMBRE_PAIR_POSSIBLE))
                                        /* Test introduit le 20131208174720...                                                       */
                         Bblock
                         PRINT_ERREUR("le dernier nombre pair est trop grand");
                         CAL1(Prer1("(il vaut %d ",dernier_nombre_pair_a_tester));
                         EGAL(dernier_nombre_pair_a_tester,DERNIER_NOMBRE_PAIR_POSSIBLE);
                         CAL1(Prer1("et %d sera utilise)\n",dernier_nombre_pair_a_tester));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ETes

               Test(EST_IMPAIR(dernier_nombre_pair_a_tester))
                                        /* Test introduit le 20131208173156...                                                       */
                    Bblock
                    PRINT_ERREUR("le dernier nombre pair n'est pas pair");
                    CAL1(Prer1("(il vaut %d ",dernier_nombre_pair_a_tester));
                    EGAL(dernier_nombre_pair_a_tester,PAR0(dernier_nombre_pair_a_tester));
                    CAL1(Prer1("et %d sera utilise)\n",dernier_nombre_pair_a_tester));
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(calculer_les_decompositions_des_nombres_pairs))
                                        /* Test introduit le 20131201102246...                                                       */
                    Bblock
                    DoIn(nombre_entier_courant
                        ,premier_nombre_pair_a_tester
                        ,dernier_nombre_pair_a_tester
                        ,PAS_DE_PROGRESSION_DES_ENTIERS
                         )
                                        /* Ainsi, on va tester les nombres entiers pairs a partir de 4 et tels qu'il puissent        */
                                        /* etre decomposes en une somme de deux nombres premiers appartenant a la liste de           */
                                        /* nombres premiers qui vient d'etre constituee...                                           */
                         Bblock
                         DEFV(Int,INIT(nombre_de_decompositions,ZERO));

                         Test(IL_NE_FAUT_PAS(editer_sequentiellement_les_decompositions))
                              Bblock
                              CAL2(Prin1("%d",nombre_entier_courant));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

#define   editer_le_rang_des_nombres_premiers                                                                                           \
                    plutot_qu_editer_les_nombres_premiers_editer_leur_rang
#define   editer_le_produit                                                                                                             \
                    editer_le_produit_de_deux_nombres_premiers
                                        /* Afin de raccourcir certaines des lignes qui viennent...                                   */

                         VERIFICATION_DE_LA_CONJECTURE_DE_GOLDBACH(BLOC(INCR(nombre_de_decompositions,I);

                                                                        Test(IL_FAUT(editer_sequentiellement_les_decompositions))
                                                                             Bblock
                                                                             Test(IL_FAUT(editer_le_rang_des_nombres_premiers))
                                        /* Test introduit le 20130111082637...                                                       */
                                                                                  Bblock
                                                                                  CAL2(Prin3("%d=NP(%d)+NP(%d)\n"
                                                                                            ,nombre_entier_courant
                                                                                            ,index1
                                                                                            ,index2
                                                                                             )
                                                                                       );
                                                                                  Eblock
                                                                             ATes
                                                                                  Bblock
                                                                                  Test(IL_NE_FAUT_PAS(editer_le_produit))
                                        /* Test introduit le 20200930142246...                                                       */
                                                                                       Bblock
                                                                                       CAL2(Prin3("%d=%d+%d\n"
                                                                                                 ,nombre_entier_courant
                                                                                                 ,NOMBRE_PREMIER_1
                                                                                                 ,NOMBRE_PREMIER_2
                                                                                                  )
                                                                                            );
                                                                                       Eblock
                                                                                  ATes
                                                                                       Bblock
                                                                                       CAL2(Prin2("%d=%d\n"
                                                                                                 ,nombre_entier_courant
                                                                                                 ,MUL2(NOMBRE_PREMIER_1
                                                                                                      ,NOMBRE_PREMIER_2
                                                                                                       )
                                                                                                  )
                                                                                            );
                                                                                       Eblock
                                                                                  ETes
                                                                                  Eblock
                                                                             ETes
                                                                             Eblock
                                                                        ATes
                                                                             Bblock
                                                                             Test(IL_FAUT(editer_toutes_les_decompositions))
                                        /* Test introduit le 20131204110949...                                                       */
                                                                                  Bblock
                                                                                  Test(IL_FAUT(editer_le_rang_des_nombres_premiers))
                                        /* Test introduit le 20130111082637...                                                       */
                                                                                       Bblock
                                                                                       CAL2(Prin2("=NP(%d)+NP(%d)",index1,index2));
                                                                                       Eblock
                                                                                  ATes
                                                                                       Bblock
                                                                                       Test(IL_NE_FAUT_PAS(editer_le_produit))
                                        /* Test introduit le 20200930142246...                                                       */
                                                                                            Bblock
                                                                                            CAL2(Prin2("=%d+%d"
                                                                                                      ,NOMBRE_PREMIER_1
                                                                                                      ,NOMBRE_PREMIER_2
                                                                                                       )
                                                                                                 );
                                                                                            Eblock
                                                                                       ATes
                                                                                            Bblock
                                                                                            CAL2(Prin1("=%d"
                                                                                                      ,MUL2(NOMBRE_PREMIER_1
                                                                                                           ,NOMBRE_PREMIER_2
                                                                                                            )
                                                                                                       )
                                                                                                 );
                                                                                            Eblock
                                                                                       ETes
                                                                                       Eblock
                                                                                  ETes
                                                                                  Eblock
                                                                             ATes
                                                                                  Bblock
                                                                                  Eblock
                                                                             ETes
                                                                             Eblock
                                                                        ETes
                                                                        )
                                                                   );
                                        /* Introduit le 20130110103355 sous cette forme...                                           */

#undef    editer_le_produit
#undef    editer_le_rang_des_nombres_premiers

                         Test(IL_NE_FAUT_PAS(editer_sequentiellement_les_decompositions))
                              Bblock
                              CAL2(Prin1("#%d\n",nombre_de_decompositions));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    EDoI
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               FIN_DE_LA_GENERATION_DE_LA_LISTE_DES_NOMBRES_PREMIERS;
                                        /* Introduit le 20130110101548 sous cette forme...                                           */
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("il faut calculer une liste avec au moins deux termes");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee");
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2025.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2025.