from fpdf import FPDF def generer_nombres_premiers(n): """Génère une liste des n premiers nombres premiers.""" premiers = [] candidat = 2 while candidat < n: est_premier = True candidat_range=candidat if candidat >=3: candidat_range=int(candidat**0.5)+1 for p in range(2,candidat_range): if candidat%p ==0: est_premier=False break if est_premier: premiers.append(candidat) candidat += 1 return premiers def dessiner_carre_nombres_premiers( nom_fichier="carre_nombres_premiers.pdf", taille_grille=10, couleur_contour=(205, 0, 204), # Noir couleur_fond=(140, 255, 251), # Blanc couleur_points=(192, 68, 255) # Rouge ): """ Crée un fichier PDF avec un carré centré contenant des points représentant des nombres premiers. Args: nom_fichier (str): Le nom du fichier PDF à générer. taille_grille (int): Le nombre de lignes et de colonnes dans le carré (X). couleur_contour (tuple): Tuple (R, G, B) pour la couleur du contour du carré. couleur_fond (tuple): Tuple (R, G, B) pour la couleur de fond du carré. couleur_points (tuple): Tuple (R, G, B) pour la couleur des points. """ # --- 1. Configuration de la page A2 --- # Dimensions d'une page A2 en millimètres : 420 x 594 mm largeur_page = 420 hauteur_page = 594 pdf = FPDF(orientation='P', unit='mm', format=(largeur_page,hauteur_page)) pdf.add_page() # --- 2. Paramètres du carré --- # Pour centrer le carré, on prend la plus petite dimension de la page taille_carre = min(largeur_page, hauteur_page) - 20 # Marge de 20mm de chaque côté # Coordonnées du coin supérieur gauche du carré pour le centrer x_carre = (largeur_page - taille_carre) / 2 y_carre = (hauteur_page - taille_carre) / 2 # --- 3. Dessin du carré (fond et contour) --- taille_border=6 pdf.set_fill_color(*couleur_contour) pdf.rect(x_carre-taille_border, y_carre-taille_border, taille_carre+taille_border*2, taille_carre+taille_border*2, 'F') # Couleur de fond pdf.set_fill_color(*couleur_fond) # Dessine le rectangle rempli et avec un contour ('FD') pdf.rect(x_carre, y_carre, taille_carre, taille_carre, 'F') # --- 4. Génération et dessin des points --- nombre_total_points = taille_grille * taille_grille nombres_premiers = generer_nombres_premiers(nombre_total_points) #nombres_premiers.append(0) #nombres_premiers = [] #nombres_premiers.append(1) #nombres_premiers.append(65) #nombres_premiers.append(129) #nombres_premiers.append(193) #nombres_premiers.append(257) #nombres_premiers.append(513) # Définir la couleur pour les points pdf.set_fill_color(*couleur_points) # Calculer la taille de chaque "case" invisible dans le carré taille_case = taille_carre / taille_grille # Taille du point (un petit carré) taille_point = taille_case / 2 for i in nombres_premiers: # Calculer la position (ligne, colonne) dans la grille ligne = i // taille_grille colonne = i % taille_grille -1 if (i%taille_grille)==0: ligne = ligne -1 colonne = taille_grille-1 # Calculer les coordonnées du centre de la case centre_x = x_carre + (colonne * taille_case) + (taille_case / 2) centre_y = y_carre + (ligne * taille_case) + (taille_case / 2) # Coordonnées du coin supérieur gauche du point pour le centrer dans sa case x_point = centre_x - (taille_point / 2) y_point = centre_y - (taille_point / 2) # Un "point" est ici un minuscule carré rempli, sans contour ('F') pdf.rect(x_point, y_point, taille_point, taille_point, 'F') #pdf.ellipse(x_point, y_point, taille_point, taille_point, 'F') # --- 5. Sauvegarde du fichier --- pdf.output(nom_fichier) print(nombres_premiers) print(len(nombres_premiers)) print(f"Le fichier '{nom_fichier}' a été créé avec succès.") # --- Exemple d'utilisation --- if __name__ == "__main__": dessiner_carre_nombres_premiers( nom_fichier="mon_dessin_de_premiers.pdf", taille_grille=64, # Un carré avec 25x25 = 625 nombres premiers couleur_contour=(0,128,0), # Noir, couleur_fond=(255,116,108),#(255,179,128), # Blanc couleur_points=(0,1,1) ) """ couleur_contour=(175,233,255), # Noir, couleur_fond=(255,207,234), # Blanc couleur_points=(171,165,255) pasteque: couleur_contour=(215,76,68), # Noir, couleur_fond=(255,116,108),#(255,179,128), # Blanc couleur_points=(0,1,1) demie : couleur_contour=(255,116,108), # Noir, couleur_fond=(255,179,128), # Blanc couleur_points=(0,1,1) Pasteque: couleur_contour=(0,128,0), # Noir, couleur_fond=(255,116,108),#(255,179,128), # Blanc couleur_points=(0,1,1) """