/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E S   N O M B R E S   P R E M I E R S   " C O M P L E X E S "  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/PremiersComplexes.01$c' :                                                                                  */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20250303135743).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  "INCLUDES.01.I"

#define   PRECIS    double
#include  "NombresComplexes.01.I"

#define   DIMENSION                                                                                                                     \
                    7

#define   XC01                                                                                                                          \
                    2
#define   XC02                                                                                                                          \
                    0
#define   YC0                                                                                                                           \
                    0

#define   dimX      DIMENSION
#define   Xmin      0
#define   Xmax      (Xmin + (dimX-1))
                                        /* Definition des abscisses.                                                                 */
#define   dimY      DIMENSION
#define   Ymin      0
#define   Ymax      (Ymin + (dimY-1))
                                        /* Definition des ordonnees.                                                                 */

#define   IMAGE(x,y)                                                                                                                    \
                    (*(image + (((y-Ymin)*dimX) + (x-Xmin))))                                                                           \
                                        /* Acces a un point de l'image.                                                              */

#define   store(n,x,y)                                                                                                                  \
                    {                                                                                                                   \
                    IMAGE(x,y) = n;                                                                                                     \
                    }                                                                                                                   \
                                        /* Rangement d'un point valide d'une image.                                                  */

int       tester_la_factorisation=FAUX;

int       editer_1=FAUX;
int       editer_2=FAUX;
int       editer_3=FAUX;
int       editer_4=VRAI;
int       il_faut_editer=VRAI;
#define   EDITION__(editer,print)                                                                                                       \
                    {                                                                                                                   \
                    if        ((editer == VRAI) && (il_faut_editer == VRAI))                                                            \
                              {                                                                                                         \
                              print;                                                                                                    \
                              }                                                                                                         \
                    else                                                                                                                \
                              {                                                                                                         \
                              }                                                                                                         \
                    }                                                                                                                   \
                                        /* Edition d'un message...                                                                   */

main()
          {
          complexe  ListePremiersComplexes[dimX*dimY];
          int       index_rangement=0;
          int       nc;
          int       Xcourant,Ycourant;

          int                 x,y;
          unsigned  char      *image;
          image=malloc(dimY*dimX);
                                        /* Definition de l'image a generer...                                                        */

          for       (y=Ymin ; y<=Ymax ; y++)
                    {
                    for       (x=Xmin ; x<=Xmax ; x++)
                              {
                              store(NOIR,x,y);
                              }
                    }

          for       (nc=XC01 ; nc < DIMENSION ; nc++)
                    {
                    int       iterer=VRAI;

                    Xcourant=nc;
                    Ycourant=YC0;

                    while     (iterer == VRAI)
                              {
                              int       index;
                              int       NombreDiviseurs=0;
                              complexe  Z_ATester;

                              Cinit(Z_ATester,Xcourant,Ycourant);

                              for       (index=0 ; index < index_rangement ; index++)
                                        {
                                        complexe  Z_Diviseur;
                                        complexe  Z_Quotient;

                                        Cegal(Z_Diviseur,ListePremiersComplexes[index]);

                                        if        (    (Reelle(Z_Diviseur) != Reelle(Z_ATester))
                                                  &&   (Imaginaire(Z_Diviseur) != Imaginaire(Z_ATester))
                                                   )
                                                  {
                                                  Cquotient(Z_Quotient,Z_ATester,Z_Diviseur);

                                                  EDITION__(editer_1
                                                           ,printf("(%f,%f)/(%f,%f)=(%f,%f)\n"
                                                                  ,Reelle(Z_ATester),Imaginaire(Z_ATester)
                                                                  ,Reelle(Z_Diviseur),Imaginaire(Z_Diviseur)
                                                                  ,Reelle(Z_Quotient),Imaginaire(Z_Quotient)
                                                                   );
                                                            );

                                                  if        (    (Reelle(Z_Quotient) == (int)Reelle(Z_Quotient))
                                                            &&   (Imaginaire(Z_Quotient) == (int)Imaginaire(Z_Quotient))
                                                             )
                                                            {
                                                            NombreDiviseurs++;

                                                            EDITION__(editer_2
                                                                     ,printf("     (%d,%d) divise (%d,%d)\n"
                                                                            ,(int)Reelle(Z_Diviseur),(int)Imaginaire(Z_Diviseur)
                                                                            ,(int)Reelle(Z_ATester),(int)Imaginaire(Z_ATester)
                                                                   );
                                                                      );
                                                            }
                                                  else
                                                            {
                                                            EDITION__(editer_3
                                                                     ,printf("     (%d,%d) ne divise pas (%d,%d)\n"
                                                                            ,(int)Reelle(Z_Diviseur),(int)Imaginaire(Z_Diviseur)
                                                                            ,(int)Reelle(Z_ATester),(int)Imaginaire(Z_ATester)
                                                                             );
                                                                      );
                                                            }
                                                  }
                                        else
                                                  {
                                                  }
                                        }

                              if        (NombreDiviseurs == 0)
                                        {
                                        if        (    (Imaginaire(Z_ATester) == 0)
                                                  &&   (    (Reelle(Z_ATester) == 0)
                                                       ||   (Reelle(Z_ATester) == 1)
                                                        )
                                                   )
                                                  {
                                        /* L'origine (0,0) et l'unite (1,0) sont eliminees a priori...                               */
                                                  }
                                        else
                                                  {
                                                  Cegal(ListePremiersComplexes[index_rangement],Z_ATester);
                                                  index_rangement++;
                                                  }
                                        }
                              else
                                        {
                                        }

                              if        (Ycourant < nc)
                                        {
                                        Ycourant++;
                                        }
                              else
                                        {
                                        if        (Xcourant > XC02)
                                                  {
                                                  Xcourant--;
                                                  }
                                        else
                                                  {
                                                  iterer=FAUX;
                                                  }
                                        }
                              }
                    }

          if        (index_rangement > 0)
                    {
                    int       index;
                    int       diagonale2=(dimX*dimX)+(dimY*dimY);

                    for       (index=0 ; index<index_rangement ; index++)
                              {
                              int       X=(int)Reelle(ListePremiersComplexes[index]);
                              int       Y=(int)Imaginaire(ListePremiersComplexes[index]);
                              double    alpha=0.9;

                              store((int)((alpha*BLANC*+(Cmodule2(ListePremiersComplexes[index])/diagonale2))+((1-alpha)*BLANC)),X,Y);

                              EDITION__(editer_4
                                       ,printf("Le nombre (%d,%d) est 'complexe entier premier'.\n",X,Y);
                                        );
                                        /* On notera :                                                                               */
                                        /*                                                                                           */
                                        /* 1-Sur l'axe Reel, tous les nombres entiers ne sont pas "complexes premiers" : c'est ainsi */
                                        /* le cas de 5, (5,0) etant divisible par (2,1)...                                           */
                                        /*                                                                                           */
                                        /* 1-Sur l'axe Imaginaire, il n'y a pas de "complexes premiers". Ainsi, par exemple,         */
                                        /* (4,1) divise (0,17)...                                                                    */
                                        /*                                                                                           */
                              }
                    }
          else
                    {
                    }

          if        (il_faut_editer == FAUX)
                    {
                    write(1,image,dimX*dimY);
                                        /* Sortie de l'image...                                                                      */
                    }
          else
                    {
                    if        (tester_la_factorisation == VRAI)
                              {
                              for       (Xcourant=XC02 ; Xcourant < DIMENSION ; Xcourant++)
                                        {
                                        for       (Ycourant=YC0 ; Ycourant < DIMENSION ; Ycourant++)
                                                  {
                                                  complexe  Z_ATester;
                                                  int       index;

                                                  Cinit(Z_ATester,Xcourant,Ycourant);

                                                  for       (index=0 ; index<index_rangement ; index++)
                                                            {
                                                            complexe  Z_Diviseur;
                                                            complexe  Z_Quotient;

                                                            Cegal(Z_Diviseur,ListePremiersComplexes[index]);
                                                            Cquotient(Z_Quotient,Z_ATester,Z_Diviseur);

                                                            EDITION__(VRAI
                                                                     ,printf("(%f,%f)/(%f,%f)=(%f,%f)\n"
                                                                            ,Reelle(Z_ATester),Imaginaire(Z_ATester)
                                                                            ,Reelle(Z_Diviseur),Imaginaire(Z_Diviseur)
                                                                            ,Reelle(Z_Quotient),Imaginaire(Z_Quotient)
                                                                             );
                                                                      );
                                        /* Et on voit ainsi que, malheureusement, ces nombres "complexes entiers premiers" ne        */
                                        /* permettent la factorisation comme c'est le cas avec les nombres entiers premiers...       */
                                                            }
                                                  }
                                        }
                              }
                    else
                              {
                              }
                    }
          }



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