/*************************************************************************************************************************************/ /* */ /* 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 { } } }