Skip to content

Instantly share code, notes, and snippets.

@bussiere
Last active August 20, 2025 15:23
Show Gist options
  • Save bussiere/4ad8e471fe9b0de2962e5539bd5036b0 to your computer and use it in GitHub Desktop.
Save bussiere/4ad8e471fe9b0de2962e5539bd5036b0 to your computer and use it in GitHub Desktop.
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)
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment