40

Objets magiques aux carrés dans l'arithmétique modulaire

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Objets magiques aux carrés dans

l'arithmétique modulaire

Anne Fisch

Sabrina Cunha

Yannick Verbeelen

supervisé par

Guendalina Palmirotta

Prof. Gabor Wiese

Mathématiques ExpérimentalesUniversité du Luxembourg

Faculté des Sciences, des Technologies et de la MédecineAnnée académique 2019-2020 (Semestre d'été)

Table des matières

1 Introduction 2

2 Carré magique d'ordre 3 3

2.1 Système linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Carré magique dans l'arithmétique modulaire 7

3.1 Arithmétique modulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 Carré magique d'ordre 3 en arithmétique modulaire . . . . . . . . . . . . . . 73.3 Carré magique au carrés d'ordre 3 . . . . . . . . . . . . . . . . . . . . . . . 103.4 Relation entre carrés magiques d'ordre 3 en arithmétique modulaire . . . . . 133.5 Carré 4× 4 : puissance de n . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4 Objets magiques 23

4.1 Cercle magique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.2 Relation Carré-Cercle magiques . . . . . . . . . . . . . . . . . . . . . . . . . 274.3 Étoiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5 Conclusion 38

1

1 Introduction

Un carré magique est une grille carrée contenant des nombres positifs et de préférencedistincts, disposés d'une façon spéciale. L'arrangement de ces nombres est de sorte quela somme de chaque ligne, chaque colonne et chaque diagonale soit le même nombre. Cescarrés magiques fascinent les humains depuis plusieurs siècles. Les premières archives decarrés magiques remontent à 2200 av. J.-C. et proviennent de Chine sous le nom de �Lo-Shu�. Une légende raconte que l'empereur Yu aurait aperçu un tel carré magique sur ledos d'une tortue divine dans le Fleuve Jaune. Les recherches à propos des carrés magiquescontinuent encore à nos jours en essayant de trouver des versions jugées plus esthétiquesou intéressantes que d'autres. Par exemple, les carrés magiques constitués de nombres aucarré. Si pour un tel carré de dimension 4, Euler trouva déjà une solution, personne n'aencore trouvé une solution pour un carré d'ordre 3. Étant donné que ce problème n'a pasété prouvé comme impossible, beaucoup de mathématicien continuent à chercher un telcarré. C'est pourquoi nous allons tenter en utilisant l'arithmétique modulaire de trouverun tel carré tout comme d'autres objets magiques.

2

2 Carré magique d'ordre 3

Dé�nition 1. Un carré magique d'ordre n ∈ N est un carré de taille n × n dont la

somme des coe�cients d'une ligne est égale à celle des autres lignes, des colonnes et des

deux diagonales. Ces coe�cients sont des nombres entiers et généralement distincts. 1 On

appelle la somme S ∈ N∗ d'un carré magique, la somme des coe�cients d'une ligne, d'une

colonne ou d'une diagonale.

Avant de considérer des carrés magiques d'ordre n, il pourrait s'avérer utile de revoirquelques notions basiques pour un carré magique d'ordre 3.

2.1 Système linéaire

Prenons un carré de taille 3×3 rempli de nombres distincts que nous allons, ici, représenterpar a, b, c, d, e, f, g, h, i ∈ N :

a b c

d e f

g h i

Pour que ce carré soit magique de somme S > 0 nous avons les conditions suivantes :

a+ b+ c = Sd+ e+ f = Sg + h+ i = Sa+ d+ g = Sb+ e+ h = Sc+ f + i = Sa+ e+ i = Sc+ e+ g = S.

(1)

En additionnant les équations avec e et en réarrangeant la nouvelle équation, on trouve :

(a+ b+ c) + (d+ e+ f) + (g + h+ i) + 3e = 4S.

Comme les sommes en parenthèse valent à chaque fois S, on en déduit que :

3e = S.

De plus il est possible d'exprimer toutes les entrées du carré en fonction d'a, b et e. Doncil su�t de choisir 3 nombres comme paramètres et on retrouve donc automatiquement uncarré magique. Pour trouver ces expressions, il su�t de résoudre le système d'équationsque nous avons montré au début de cette section, tout en remplaçant S par 3e. En utilisantla première équation, p. ex., nous trouvons :

c = 3e− a− b.1. Nous allons justement nous focaliser sur des objets magiques à coe�cients distincts dans ce rapport.

3

En faisant de même pour toutes les équations nous trouvons �nalement les équationsrecherchées :

a = ab = bc = 3e− a− bd = 4e− 2a− be = ef = 2a+ b− 2eg = a+ b− eh = 2e− bi = 2e− a.

(2)

Un carré magique d'ordre 3 est donc de la forme suivante :

a b 3e − a − b

4e − 2a − b e 2a + b − 2e

a + b − e 2e − b 2e − a

4

Exemple 1. Prenons maintenant 3 nombres comme paramètres, p. ex. a = 4, b = 8,e = 11. On trouve le carré magique suivant avec S = 3e = 33 :

9 8 16

18 11 4

6 14 13

E�ectivement en additionnant les nombres de la première rangée, représentés par le fondjaune, on trouve : 9 + 8 + 16 = 33. De même pour les nombres de la première colonne,représentés par le fond vert (9 + 18+ 6 = 33) ou de la première diagonale, représentés parle fond bleu (9 + 11 + 13 = 33). On constate exactement le même phénomène pour toutesles rangées, les colonnes ou la diagonale restantes.

2.2 Programme

Nous avons aussi programmé un algorithme qui calcule et représente un carré magiqueavec cette méthode. Ce programme demande à l'utilisateur d'entrer trois valeurs, corres-pondant donc aux paramètres a, b et e décrits ci-dessus. Il calcule alors les autres valeurs,en utilisant le système d'équations (2), telles que la somme du carré soit 3e. Finalement leprogramme a�che le carré magique ainsi obtenu.Ci-dessous le programme en question :

1 a = int(input("Entrez un nombre naturel a: "))

2 b = int(input("Entrez un nombre naturel b: "))

3 e = int(input("Entrez un nombre naturel e: "))

4 print("Somme:", 3*e)

5

6 c = 3*e-a-b

7 h = 2*e-b

8 i = 2*e-a

9 g = -e+b+a

10 f = -2*e+2*a+b

11 d = 4*e-2*a-b

12

13 M = [[a, b, c],[d, e, f],[g, h, i]]

14

15 from tkinter import*

16 root = Tk()

17 canvas = Canvas(root , width =312, height =312, bg = "white")

18 canvas.pack()

19

20 size = 100

21 def draw_grid(grid):

22 for col in range (4):

23 line = canvas.create_line (5+col*size , 5, 5+col*size , 5+3*size ,

width = 3)

24 for row in range (4):

5

25 line = canvas.create_line (5, 5+row*size , 5+size*3, 5+row*size ,

width = 3)

26 for row in range (3):

27 for col in range (3):

28 canvas.create_text(size //2 + size*row , size //2 +size*col , fill=

"black", font="Arial 30", text = grid[row][col])

29

30 draw_grid(M)

Voici un exemple d'utilisation de ce programme où l'utilisateur a entré les paramètresa = 67, b = 87 et e = 98 :

Le programme crée un carré magique avec somme 3e = 3× 98 = 294.

6

3 Carré magique dans l'arithmétique modulaire

3.1 Arithmétique modulaire

Puisqu'il s'agit d'un problème ouvert de trouver un carré magique d'ordre 3 à coe�cientsau carré, il peut s'avérer utile d'introduire ici la notion d'arithmétique modulaire a�n defaciliter la formation de carré magique plus compliqué. L'arithmétique modulaire est unoutil inventé en 1801 par Carl Friederich Gauss, qui simpli�e les calculs et raisonnementsarithmétiques. Cet outil repose sur l'étude du reste de la division euclidienne. Nous allonséviter de rentrer trop dans les détails à ce sujet, mais l'idée générale est la suivante : soienta et n deux nombres entiers, calculer a mod(n) revient à déterminer le reste de la divisioneuclidienne de a par n. Cela va simpli�er nos calculs pour les carrés magiques, car nouspourrons remplir le carré de nombres distincts qui en calcul modulaire auront la mêmevaleur, nous laissant donc plus de liberté. Par exemple : 18mod(7) = 32mod(7). Nousallons donc pour ces raisons nous tourner plus souvent vers l'arithmétique modulaire lorsde la création d'objets magiques dans ce projet.

3.2 Carré magique d'ordre 3 en arithmétique modulaire

Il est donc maintenant tout à fait possible de calculer un carré magique comme dans la sec-tion 2.1 tout en utilisant l'arithmétique modulaire. Il su�ra donc que la somme de chaqueligne, de chaque colonne et des diagonales, soit égale à un nombre S mod(n). Nous avonsdonc programmé un algorithme qui fait exactement cela et représente le carré obtenu. Ilsu�t à l'utilisateur d'entrer la somme qu'il souhaite avoir, comme par exemple 3mod(4).Le programme choisit alors d'une façon aléatoire les valeurs sur les diagonales. Puis ilcalcule les valeurs restantes du carré, tout en garantissant que les valeurs soient toutesdistinctes et de sorte que la somme de chaque ligne, chaque colonne et chaque diagonalesoit celle demandée par l'utilisateur. Au cas où le programme ne trouverait pas de valeursqui conviennent, il recommence ce procédé du début jusqu'à ce qu'il obtienne un carrémagique respectant les conditions. Finalement le programme a�che le carré obtenu.

1 from random import randint

2 import math

3 import tkinter

4 minimum = 0

5 maximum = 100

6 global n, m

7 n = int(input("Entrez un entier naturel: "))

8 m = int(input("Entrez un modulo: "))

9

10 def control(k, l): #pour controler que les entiers sont tous distincts

11 for i in l:

12 while i == k:

13 k = randint(minimum , maximum)

14 return k

15

16

17 def finding_third_integer(x, y, l): #pour trouver le troisième entier dans

une ligne/colonne

18 r0 = (x+y)%m

19 r1 = abs(m+n-r0)

20 k = randint(minimum , maximum)

21 z = m*k+r1

7

22 for i in l: #pour garantir que les entiers sont tous distincts

23 while i == z:

24 k = randint(minimum , maximum)

25 z = m*k+r1

26 return z

27

28

29 run = True

30 while run:

31 l = []

32 check = True

33 while check: #pour trouver la diagonale a, e, i tel que a+e+i = n mod m

(de facon aléatoire)

34 a = randint(minimum , maximum)

35 e = randint(minimum , maximum)

36 e = control(e, l)

37 i = randint(minimum , maximum)

38 while e == i: #pour eviter que e et i sont égaux

39 i = randint(minimum , maximum)

40 i = control(i, l)

41

42 if (a+e+i-n)%m==0:

43 l.append(a)

44 l.append(e)

45 l.append(i)

46 check = False

47

48 check = True

49 while check: #pour trouver l'autre diagonale c, e, g tel que c+e+g = n

mod m

50 c = randint(minimum , maximum)

51 c = control(c, l)

52 g = randint(minimum , maximum)

53 while g == c:#pour éviter que c et g sont égaux

54 g = randint(minimum , maximum)

55 g = control(g, l)

56

57 if (c+e+g-n)%m == 0:

58 l.insert(1,c)

59 l.insert(3,g)

60 check = False

61

62

63 b = finding_third_integer(a, c, l)

64 l.insert(1,b)

65

66 d = finding_third_integer(a, g, l)

67 l.insert(3,d)

68

69 f = finding_third_integer(d, e, l)

70 l.insert(5,f)

71

72 h = finding_third_integer(g, i, l)

73 l.insert(7,h)

74

75 if (g+h+i-n)%m == 0 and (b+e+h-n)%m == 0 and (d+e+f-n)%m == 0 and (c+f+

i-n)%m == 0: #pour garantir que tous les conditions sont satisfaites

76 run = False

77

78 def draw_grid(grid):

8

79 root = tkinter.Tk()

80 canvas = tkinter.Canvas(root , width =312, height =312, bg = "white")

81 canvas.pack()

82

83 size = 100

84 for col in range (4):

85 line = canvas.create_line (5+col*size , 5, 5+col*size , 5+3*size ,

width = 3)

86 for row in range (4):

87 line = canvas.create_line (5, 5+row*size , 5+size*3, 5+row*size ,

width = 3)

88 for row in range (3):

89 for col in range (3):

90 canvas.create_text(size //2 + size*row , size //2 +size*col , fill=

"black", font="Arial 30", text = grid[col][row])

91

92

93 M = []

94 for i in range (3):

95 M.append ([])

96 for j in range (3):

97 M[-1]. append(l[j+3*i])

98

99 draw_grid(M)

Ci-dessous deux exemples d'utilisation de ce programme où la somme demandée par l'uti-lisateur est 4mod(91) respectivement 123mod(87) :

Cependant le programme ne fonctionne pas si la somme demandée équivaut à 1mod(3) ou2mod(3). Ce problème survient seulement pour des sommes modulo 3.

9

3.3 Carré magique au carrés d'ordre 3

Comme mentionner précédemment la recherche d'un carré magique d'ordre 3 au coe�cientsaux carrés reste un problème ouvert. Cependant en utilisant l'arithmétique modulaire, ilnous est possible de trouver des carrés magiques respectant ces conditions. Nous avonsmême programmé un algorithme se basant sur le programme de la section 3.2.Le programme fonctionne de la même façon, sauf qu'on y rajoute la condition que lescoe�cients doivent être des nombres entiers aux carrés. Voici deux exemples d'utilisationdu programme, où les sommes exigées sont 0mod(25) et 0mod(90) respectivement.

Il est important de préciser que ce programme est toujours en cours de développement étantdonné qu'il ne fonctionne pas encore pour toutes les valeurs. Ci dessous le programme enquestion :

1 from random import randint

2 import math

3 import tkinter

4 minimum = 0

5 maximum = 100

6 global n, m

7 n = int(input("Entrez un entier naturel: "))

8 m = int(input("Entrez un modulo: "))

9 z = 0

10

11 def control(k, l):

12 """controle que les entiers sont tous distincts"""

13 for i in l:

14 while i == k**2:

15 k = randint(minimum , maximum)

16 return k**2

17

18

19 def finding_third_integer(x, y, carre):

20 """pour trouver le troisième entier dans une ligne/colonne"""

21 for i in carre:

22 if (x + y + i -n)%m == 0:

23 return i

24 return -1

25

10

26 def draw_grid(grid):

27 """dessine le carré magique"""

28 root = tkinter.Tk()

29 canvas = tkinter.Canvas(root , width =312, height =312, bg = "white")

30 canvas.pack()

31

32 size = 100

33 for col in range (4):

34 line = canvas.create_line (5+col*size , 5, 5+col*size , 5+3*size ,

width = 3)

35 for row in range (4):

36 line = canvas.create_line (5, 5+row*size , 5+size*3, 5+row*size ,

width = 3)

37 for row in range (3):

38 for col in range (3):

39 canvas.create_text(size //2 + size*row , size //2 +size*col , fill=

"black", font="Arial 30", text = grid[col][row])

40

41 def grid(l):

42 """crée une matrice pour dessiner le carré"""

43 M = []

44 for i in range (3):

45 M.append ([])

46 for j in range (3):

47 M[-1]. append(l[j+3*i])

48 draw_grid(M)

49

50

51 def diagonale ():

52 """Pour trouver les diagonales """

53 l = []

54 carre = [i**2 for i in range (101)]

55 check = True

56 while check: #pour trouver la diagonale a, e, i tel que a+e+i = n mod m

(de facon aléatoire)

57 l = []

58 a = randint(minimum , maximum)

59 a = a**2

60 l.append(a)

61 e = randint(minimum , maximum)

62 e = control(e, l)

63 l.append(e)

64 i = randint(minimum , maximum)

65 while e == i**2: #pour eviter que e et i sont égaux

66 i = randint(minimum , maximum)

67 i = control(i, l)

68 l.append(i)

69

70 if (a+e+i-n)%m==0:

71 carre.remove(a)

72 carre.remove(e)

73 carre.remove(i)

74 check = False

75

76 check = True

77 while check: #pour trouver l'autre diagonale c, e, g tel que c+e+g = n

mod m

78 if len(l) == 5:

79 l.remove(c)

80 l.remove(g)

11

81 c = randint(minimum , maximum)

82 c = control(c, l)

83 l.insert(1,c)

84 g = randint(minimum , maximum)

85 while g**2 == c:#pour éviter que c et g sont égaux

86 g = randint(minimum , maximum)

87 g = control(g, l)

88 l.insert(3, g)

89

90 if (c+e+g-n)%m == 0:

91 carre.remove(c)

92 carre.remove(g)

93 return l, carre

94

95 def ligne_colonne ():

96 """Pour trouver les valeurs des paramètres b, d, f, h tel que le carré

est magique """

97 l, carre = diagonale ()

98 a = l[0]

99 c = l[1]

100 e = l[2]

101 g = l[3]

102 i = l[4]

103 b = finding_third_integer(a, c, carre)

104 if b == -1:

105 return -1

106 l.insert(1,b)

107 carre.remove(b)

108 d = finding_third_integer(a, g, carre)

109 if d == -1:

110 return -1

111 l.insert(3,d)

112 carre.remove(d)

113 f = finding_third_integer(d, e, carre)

114 if f == -1:

115 return -1

116 l.insert(5,f)

117 carre.remove(f)

118 h = finding_third_integer(g, i, carre)

119 if h == -1:

120 return -1

121 l.insert(7,h)

122 carre.remove(h)

123 if (g+h+i-n)%m == 0 and (b+e+h-n)%m == 0 and (d+e+f-n)%m == 0 and (c+f+

i-n)%m == 0: #pour garantir que tous les conditions sont satisfaites

124 run = False

125 grid(l)

126 return 0

127 run = True

128 while run:

129 y = ligne_colonne ()

130 z += 1

131 if y == 0:

132 run = False

133 if z == 100: #pour assurer que le programme se termine

134 print("Aucun carré magique de somme {0} mod {1} a été trouvé".

format(n, m))

135 run = False

12

3.4 Relation entre carrés magiques d'ordre 3 en arithmétique modulaire

Proposition 1. Soient m,n, a, b, ..., i ∈ N et mα, nα, aα, ..., iα ∈ N pour α ∈ {1, 2}(a) Considérons les deux carrés magiques d'ordre 3 de somme m1 mod(n1) et m2 mod(n2)

respectivement :

On appelle carré somme, le carré magique obtenu en additionnant terme à terme ces

deux carrés magiques :

Ce nouveau carré est de somme m1 +m2 mod(pgcd(n1, n2)).

(b) Considérons le carré magique suivant de somme m mod(n) :

13

En multipliant ce carré par un scalaire k ∈ N, nous obtenons le carré suivant de somme

k ·m mod(k · n) :

Démonstration. Comme il s'agit des carrés magiques, il su�t de calculer la somme descoe�cients d'une ligne/colonne pour obtenir la somme du carré.

(a) Calculons la somme du carré somme suivant la première ligne, pour k, q ∈ Z :

(a1 + a2) + (b1 + b2) + (c1 + c2) = (a1 + b1 + c1) + (a2 + b2 + c2)

= m1 mod(n1) +m2 mod(n2)

= m1 + n1 · k +m2 + n2 · q= m1 +m2 + pgcd(n1, n2)(

n1pgcd(n1, n2)

k +n2

pgcd(n1, n2)q)

= m1 +m2 mod(pgcd(n1, n2)).

(b) Calculons la somme du carré magique multiplé par un scalaire aussi suivant la premièreligne, pour q ∈ Z :

k · a+ k · b+ k · c = k · (a+ b+ c)

= k · (mmod(n))

= k · (m+ q · n)= k ·m+ k · q · n= k ·m+ q · (k · n)= k ·mmod(k · n).

14

Exemple 2. (a) Supposons qu'on a les carrés magiques suivants de somme 3mod(39) et2mod(65) respectivement :

Alors le carré somme est le suivant :

Calculons la somme du carré somme à l'aide de la formule :On a m1 = 2, m2 = 3, n1 = 39 et n2 = 65, ainsi on obtient 2+3 = 5 et pgcd(65, 39) =13, donc la somme du carré somme est égal à 5mod(13).

Véri�ons le en calculant la somme suivant la première ligne :

134 + 1231 + 109 = 1474

= 5 + 13 · 113= 5mod(13).

(b) Prenons le carré magique de somme 4 mod(5) suivant et multiplions le par 5 :

15

Alors on obtient le carré suivant :

En utilisant la formule, on obtient comme somme 5·4mod(5·5) c'est-à-dire 20mod(25).Véri�ons le, en calculant la somme suivant la prémière ligne :

140 + 670 + 160 = 970

= 20 + 25 · 38= 20mod(25).

Maintenant combinons (a) et (b) de la proposition 1 pour obtenir un carré modulo n1 ·n2.

Corollaire 1. Supposons qu'on a deux carrés magiques de sommem1 mod(n1) etm2 mod(n2).En additiant le premier carré multiplié par n2 avec le deuxième multiplié par n1, on obtient

un carré magique de somme m1 · n2 +m2 · n1 mod(n1 · n2).

Démonstration. C'est une conséquence de Prop. 1Multiplions d'abord le premier carré magique de somme m1 mod(n1) par n2, alors parProp. 1(b), on obtient un carré de somme m1 · n2 mod(n1 · n2). En mutipliant alors ledeuxième carré de somme m2 mod(n2) par n1, on obtient, par Prop. 1(b), un carré desomme m2 · n1 mod(n1 · n2). Finalement, en additionnant les deux carrés magiques ainsiobtenu, on obtient, par Prop. 1(a), un carre magique de sommem1 ·n2+m2 ·n1 mod(n1 ·n2),car le pgcd(n1 · n2, n1 · n2) = n1 · n2.

Exemple 3. Supposons qu'on a les carrés magiques suivants de somme 0 mod(5) et de 0mod(3) :

16

En additionnant le premier carré multiplié par 3 avec le deuxième carré multiplié par 5,on obtient le carré suivant :

On a 0 · 3 + 0 · 5 = 0 et 5 · 3 = 15, donc le carré ainsi trouvé, est de somme 0mod(15).Véri�ons le en calulant la somme, selon la première ligne :

78 + 301 + 281 = 660

= 15 · 44= 0mod(15).

17

3.5 Carré 4× 4 : puissance de n

A�n de trouver un carré magique contenant que des puissances d'un certain nombre n ∈ N,il faut e�ectuer plusieurs étapes. Tout d'abord, il faut choisir un nombre naturel n. Ensuite,il s'agit de trouver une formule générale donnant les deux derniers chi�res de la puissancede ce nombre naturel n. Pour obtenir un carré magique de taille 4 × 4, il faut trouverles deux mêmes derniers chi�res pour chaque quatrième puissance. Pour trouver une telleformule, il serait utile de calculer les huit premières puissances de n pour s'inspirer etvéri�er qu'il y a bien une répétition. Si cela est le cas, on peut trouver une formule généralepour calculer les puissances de n mod(100). Finalement, il su�t juste encore de calculerla somme des nombres formés par les derniers chi�res des puissances. Après ceci, il fautarranger les puissances dans le carré magique d'une manière à trouver dans chaque ligne,chaque colonne et chaque diagonale les quatre puissances di�érentes.A�n de mieux comprendre, faisons un exemple :

1. Prenons le nombre naturel n = 7.

2. Regardons les 8 premières puissances :� 70 = 1 ≡ 1mod(100)� 71 = 7 ≡ 7mod(100)� 72 = 49 ≡ 49mod(100)� 73 = 343 ≡ 43mod(100)� 74 = 2401 ≡ 1mod(100)� 75 = 16807 ≡ 7mod(100)� 76 = 117649 ≡ 49mod(100)� 77 = 823543 ≡ 43mod(100).

3. Ainsi on trouve la formule suivante :

7n ≡

1 sin ≡ 0mod(4)

7 sin ≡ 1mod(4)

49 sin ≡ 2mod(4)

43 sin ≡ 3mod(4)

(mod100).

4. Calculons la somme : 1 + 7 + 49 + 43 = 100 ≡ 0mod(100).

5. Arrangeons les nombres a�n d'obtenir un carré magique contenant que des puissancesde 7 et de somme 0mod(100).

Voici un exemple d'un tel carré :

18

E�ectivement la somme des diagonales, des colonnes et des rangées équivaut à 0mod(100).Nous avons aussi programmé un algorithme qui demande à l'utilisateur un entier n et créesi possible un carré magique d'ordre 4 formé que de puissance de cet entier n.

S'il est possible de créer un tel carré magique grâce à la méthode indiquée ci-dessus leprogramme commence par calculer la somme des diagonales, colonnes et rangées. Ensuiteil choisit d'une façon aléatoire les exposants tels que le carré, dont les coe�cients sontl'entier n élevé à ces exposants, soit magique.Finalement le programme a�che la somme et le carré dont les coe�cients sont les exposantsauquel il faudrait élever le nombre n. Pour mieux comprendre l'a�chage du programmevoici le même carré magique qu'indiqué ci-dessus calculé par le programme :

S'il n'est pas possible de créer un tel carré magique pour le nombre entré par l'utilisateurle programme a�chera un message indiquant qu'il ne lui est pas possible de le créer. Voiciun autre exemple du programme pour le nombre 13 :

19

Ci-dessous le programme en question :

1 import random

2 import numpy as np

3 import tkinter

4 """Demande à l'utilisateur un entier n et essaie s'il est possible de cré

er un carré magique de taille 4x4 formé qu 'avec des puissances de l'

entier n

5 si le carré magique est possible , le programme calcule et donne un carré

contenant les exposants.

6 De plus , le programme calcule et donne la somme.

7 Pour obtenir le vrai carré magique , il faut élever le nombre n à ces

exposants."""

8 def control(l):

9 """Pour garantir que les exposants sont tous distincts """

10 for i in range(len(l)):

11 for j in range(len(l)):

12 if l[j] == l[i] and i!= j:

13 L = creation_of_a_list ()

14 return L

15 return l

16

17

18 def creation_of_a_list ():

19 """création d'une liste pour obtenir des exposants aléatoires

20 et pour garantir que les exposants sont distincts"""

21 l = []

22 for i in range (16):

23 k = random.randint(min , max)

24 if len(l) < 4:

25 l.append(k)

26 elif len(l) >= 4:

27 while k == l[i-4]:

28 k = random.randint(min , max)

29 l.append(k)

30 elif len(l)>= 8:

31 while k == l[i-4] or k == l[i-8]:

32 k = random.randint(min , max)

33 l.append(k)

34 elif len(l) >= 12:

35 while k == l[i-4] or k == l[i-8] or k == l[i -12]:

36 k = random.randint(min , max)

37 l.append(k)

38 return l

39

40

41 def fill_up_the_square(L):

42 """calcule les différents exposants"""

43 check = True

44 while check:

45 M = []

46 a = 0+4*L[0]

47 b = 1+4*L[1]

48 c = 3+4*L[2]

49 d = 2+4*L[3]

50 M.append ([a, b, c, d])

51 e = 2+4*L[4]

52 f = 3+4*L[5]

53 g = 1+4*L[6]

54 h = 0+4*L[7]

20

55 M.append ([e, f, g, h])

56 i = 1+4*L[8]

57 j = 0+4*L[9]

58 k = 2+4*L[10]

59 l = 3+4*L[11]

60 M.append ([i, j, k, l])

61 m = 3+4*L[12]

62 n = 2+4*L[13]

63 o = 0+4*L[14]

64 p = 1+4*L[15]

65 M.append ([m, n, o, p])

66 l = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p]

67 L = control(l)

68 if l == L:

69 return M

70

71

72 def draw_grid(grid):

73 """Pour dessiner le carré contenant les exposants. """

74 root = tkinter.Tk()

75 canvas = tkinter.Canvas(root , width =412, height =412, bg = "white")

76 canvas.pack()

77

78 size = 100

79 for col in range (5):

80 line = canvas.create_line (5+col*size , 5, 5+col*size , 5+4*size ,

width = 3)

81 for row in range (5):

82 line = canvas.create_line (5, 5+row*size , 5+size*4, 5+row*size ,

width = 3)

83 for row in range (4):

84 for col in range (4):

85 canvas.create_text(size //2 + size*row , size //2 +size*col , fill=

"black", font="Arial 30", text = grid[col][row])

86

87

88

89 def check_if_possible(x):

90 """vérifie si c'est possible de créer un tel carré magique

91 et donne le carré contenant les exposants."""

92 s = x**0 + x**1 + x**2 + x**3

93 s = s%100

94

95 s1 = x**4 + x**5 + x**6 + x**7

96 s1 = s1%100

97

98 if s == s1:

99 l = creation_of_a_list ()

100 M = fill_up_the_square(l)

101 print("Carré avec exposant de {0}".format(x))

102 print("Somme: {0} mod {1}".format(s, 100))

103 draw_grid(M)

104

105 else:

106 print("Pour ce nombre précis il n'est pas possible de créer un tel

carré magique contenant que des puissances.")

107

108

109 min = 0

110 max = 20 #pour que les exposants soient inférieurs ou égal à 100

21

111 x = int(input("Entrez un nombre entier: "))

112 check_if_possible(x)

22

4 Objets magiques

Il est évidemment possible d'appliquer le principe du carré magique à d'autes �gures. Ilfaudra juste bien dé�nir comment cette �gure est construite et ce qui la rend magique.Nous allons dans la suite poser une dé�nition pour des cercles et des étoiles magiques.

4.1 Cercle magique

Dé�nition 2. Un cercle magique est composé de plusieurs anneaux intérieurs et de lignes

qui représentent le diamètre du cercle. Pour que le cercle soit magique, il faut que les

sommes des nombres sur chaque anneaux et sur chaque ligne de diamètre soient égales

entre elles.

Nous utilisons l'arithmétique modulaire dans cette section a�n de trouver de tels cerclesmagiques.Comme exemple, voici le premier cercle magique avec lequel nous avons travaillé :

La somme de chaque anneau est 200 et la somme de chaque diamètre est 325. En utilisantl'arithmétique modulaire on peut prendre modulo(25) a�n que la somme des anneaux et lasomme des lignes soient égales à 0mod(25). Le 25 au milieu du cercle représente justementcela.

23

Pour la construction de ce cercle nous avons utilisé le carré magique de taille 3 × 3, dontles coe�cients sont les nombres de 1 à 9, suivant :

4 9 2

3 5 7

8 1 6

On dé�nit le groupe radial de chaque nombre tel qu'on additionne à chaque fois 10 aunombre précédent (le groupe radial de 1 est 1, 11, 21, ..., de 2 est 2, 12, 22, ..., etc.) et on engarde les 5 premiers nombres de chaque groupe.

Puis on alterne chaque groupe radial sur les lignes de diamètre. De plus il faut alternerl'ordre du groupe radial, c'est-à-dire qu'on commence une fois avec le plus petit nombre surle cercle extérieur et sur la ligne suivante avec le plus grand nombre sur le cercle extérieur.La seule exception est pour le chi�re 5 où on utilise les 9 premiers multiples de ce dernierdans l'anneau central. On positionne les multiples de sorte que les sommes soient égales à0mod(25), à part le nombre 25 qui est positionné au centre.

Voici un deuxième exemple :

On a e�ectué les mêmes calculs pour un cercle modulo 125 cette fois-ci. L'inspiration pourl'emplacement des nombres est venue du premier cercle traité. Pour créer les groupes ra-diaux nous avons utilisé les 9 premiers multiples de 5 et on additionne à chaque fois 50au nombre précédent. Sur l'anneau central on y place les multiples de 25, en positionnant

24

125 à nouveau au centre vu qu'on calcule avec modulo(125). Finalement on obtient quela somme d'un anneau est 1000 et la somme d'une ligne de diamètre est 1500. Les deuxrésultats trouvés équivalent à 0mod(125).

Nous avons constaté par après qu'e�ectivement il su�sait de tout multiplier par 5 ce quinous a permis de programmer un algorithme qui calcule un cercle magique en arithmétiquemodulaire pour tout multiple de 25 :

1 from tkinter import*

2

3 def draw_circle ():

4 """Pour dessiner le cercle"""

5 root = Tk()

6 canvas = Canvas(root , width =800, height =800, bg = "white")

7 canvas.pack()

8 w = 800

9 h = 800

10 space = 10

11 step = 60

12 for i in range (6):

13 canvas.create_oval(space+i*step , space+i*step , w-space -i*step , h-

space -i*step , width = 3)

14 canvas.create_line(w//2, space , w//2, h-space , width = 3)

15 canvas.create_line(space , h//2, w-space , h//2, width = 3)

16 canvas.create_line(space + 2*step , space +2*step , w-space -2*step , h-

space -2*step , width =3)

17 canvas.create_line(w-space - 2*step , space +2*step , space +2*step , h-

space -2*step , width =3)

18 for i in range (len(l1)):

19 canvas.create_text(w//2 - 3/2* space , space *2 + step*i, fill="black"

, font="Arial 12", text = l9[i])

20 canvas.create_text(w//2 + 3/2* space , h - space*2 - step*i, fill="

black", font="Arial 12", text = l1[i])

21 canvas.create_text(space *5/2+ step*i, h//2 + space , fill="black",

font="Arial 12", text = l3[i])

22 canvas.create_text(w - space *5/2 - step*i, h//2 - space , fill="

black", font="Arial 12", text = l7[i])

23 canvas.create_text(space + 2*step + 42*i , space*3 + 2*step +42*i,

fill="black", font="Arial 12", text = l4[i])

24 canvas.create_text (3* space + 2*step + 42*i ,h - space - 2*step -

42*i, fill="black", font="Arial 12", text = l2[i])

25 canvas.create_text(w- space - 2*step - 42*i , h - space *3 - 2*step

- 42*i, fill="black", font="Arial 12", text = l6[i])

26 canvas.create_text(w- 3*space - 2*step - 42*i , space + 2*step +42*

i, fill="black", font="Arial 12", text = l8[i])

27 canvas.create_text(w//2, h//2-space , fill="black", font="Arial 15",

text = mod)

28

29

30 mod = int(input("Entrez un nombre qui est divisible par 25: "))

31 while mod%25 != 0: #pour controler si le nombre entré par l'utlilsateur est

divisible par 25

32 print("Ce nombre n'est pas divisible par 25")

33 mod = int(input("Entrez un nombre qui est divisible par 25: "))

34 k = mod //25

35

36 #à partir du cercle (mod 25), le programme calcule le cercle desiré

37 l1 = [(1+10*i)*k for i in range (5)] + [5*k]

38 l2 = [(2+10*i)*k for i in range(4, -1, -1)] + [10*k]

25

39 l3 = [(3+10*i)*k for i in range (5)] + [15*k]

40 l4 = [(4+10*i)*k for i in range (5)] + [20*k]

41 l5 = [(5+10*i)*k for i in range (5)]

42 l6 = [(6+10*i)*k for i in range (5)] + [30*k]

43 l7 = [(7+10*i)*k for i in range(4, -1, -1)] + [35*k]

44 l8 = [(8+10*i)*k for i in range(4, -1, -1)] + [40*k]

45 l9 = [(9+10*i)*k for i in range(4, -1, -1)] + [45*k]

46

47 draw_circle ()

Avec ce programme l'utilisateur peut donc par exemple facilement créer un cercle magiquedont la somme sur les lignes et les cercles équivaut à 0mod(300) ou même 0mod(99975) :

Figure 1 � 0mod(300)

Figure 2 � 0mod(99975)

26

4.2 Relation Carré-Cercle magiques

On peut trouver le même système d'équations pour un cercle magique à deux anneauxavec deux lignes de diamètre et un carré magique de taille 3× 3. 2 Nous allons représenterles coe�cients du carré par les lettres d'a à i comme dans la section 2.1. Le but étant detrouver les emplacements de ces variables dans le cercle a�n que ce dernier soit magique sile carré l'est aussi.

Proposition 2. Pour tout carré magique de taille 3× 3 avec somme S = 3e, soit le cercle

associé suivant :

Alors le cercle associé est lui aussi magique avec somme S′ = 4e.

Démonstration. Pour démontrer que le cercle associé est aussi magique, il faut montrerque les conditions suivantes sont satisfaites :

a+ c+ i+ g = S′

f + h+ b+ d = S′

a+ h+ b+ i = S′

c+ d+ g + f = S′.

(3)

Par la section 2.1, on sait qu'un carré magique d'ordre 3 est représenté par les équationssuivantes, avec a, b et e comme paramètres �xes :

a = ab = bc = 3e− a− bd = 4e− 2a− be = ef = 2a+ b− 2eg = a+ b− eh = 2e− bi = 2e− a.

(4)

2. Il est important de noter qu'ici nous travaillons avec des �gures magiques en dehors de l'arithmétique

modulaire.

27

Il su�t maintenant de remplacer les variables dans (3) par les expressions dans (4) :a+ c+ i+ g = a+ (3e− a− b) + (2e− a) + (a+ b− e)f + h+ b+ d = (2a+ b− 2e) + (2e− b) + b+ (4e− 2a− b)a+ h+ b+ i = a+ (2e− b) + b+ (2e− a)c+ d+ g + f = (3e− a− b) + (4e− 2a− b) + (a+ b− e) + (2a+ b− 2e).

(5)

⇐⇒

a+ c+ i+ g = 4ef + h+ b+ d = 4ea+ h+ b+ i = 4ec+ d+ g + f = 4e.

(6)

On a donc bien que le cercle est magique et que sa somme vaut S′ = 4e.

Exemple 4. Constituons un carré magique à l'aide de notre porgramme présenté à lasection 2.2 en prenant pour paramètres a = 52, b = 117 et e = 65 :

Alors le cercle associé est :

On constate que la somme des coe�cients sur une ligne de diamètre ou sur un anneau estégale à 4e = 4× 65 = 260.

28

4.3 Étoiles

Dé�nition 3. Une étoile magique est constituée de segments reliants les pointes de l'étoile

entre elles. Les coe�cients de l'étoile se trouvent sur chaque pointe et à chaque intersection

de ces segments. Voici par exemple une étoile à 5 pointes dont les coe�cients sont les

variables distinctes de a à j.

L'étoile est considérée magique si les sommes des coe�cients sur chaque segment sont

égales entre elles.

Prenons l'étoile présentée dans la dé�nition, nous nous retrouvons ainsi avec les conditionssuivantes (pour S ∈ N) :

a+ b+ d+ e = S

c+ d+ f + g = S

e+ f + h+ i = S

a+ g + h+ j = S

b+ c+ i+ j = S.

Lorsqu'on résout ce système (avec l'aide de Sagemath) on trouve qu'une étoile magique(à cinq pointes) dépend de la somme demandée et des cinq coe�cients représentés ici parj, i, h, g et f ∈ N :

a = S − j − h − g

b = −12 × S + h + g + f

c = 32 × S − j − i− h− g − f

d = −12 × S + j + i + h

e = S − i − h − f

f = f

g = g

h = h

i = i

j = j.

29

Voici un exemple d'une telle étoile magique respectant ces conditions :

On constate qu'e�ectivement la somme des coe�cients sur chaque segment est égale à 24.De plus chaque coe�cient respecte les équations données par le système dépendant descinq variables et de la somme (p.ex. : 12 = 24− 1− 3− 8).

Cela permet de trouver de nombreuses étoiles magiques, en voici une collection de quelquesexemples aux coe�cients intéressants :

Figure 3 � Nombres pairs avec somme S = 128.

30

Figure 4 � Nombres impairs avec somme S = 68.

Figure 5 � Nombres premiers avec somme S = 246.

Figure 6 � Multiples de 19 avec somme S = 456.

Par la même méthode, il est possible de trouver les conditions pour des étoiles à six ou septpointes. Cela nous a permis de programmer un algorithme qui demande à l'utilisateur lenombre de pointes souhaitées pour son étoile magique ainsi que sa somme avant de généreret représenter une telle étoile magique.

31

Comme exemple d'utilisation du programme voici trois étoiles où l'utilisateur a demandédes étoiles à respectivement 5, 6 et 7 pointes et de somme 78 :

Le programme en question est le suivant :

1 from random import randint

2 import tkinter

3

4 def control(d):

5 """Pour garantir que les entiers sont tous distincts """

6 for c, i in d.items():

7 for k, j in d.items():

8 if i == j and c != k:

9 return False

10 return True

11

12

13 def étoile_cinq ():

14 """Choisit d'une façon aléatoire les paramètres j, i, h, g, f et

calcule alors les variables restantes a, b, c, d, e pour créer une é

toile magique de 5 pointes et de somme L"""

15 z = 0

16 dic = {}

32

17 j = randint(min , max)

18 i = randint(min , max)

19 h = randint(min , max)

20 g = randint(min , max)

21 f = randint(min , max)

22 e = L-i-h-f

23 d = -(1/2)*L+j+i+h

24 c =(3/2)*L-j-i-h-g-f

25 b = -(1/2)*L+h+g+f

26 a = L-j-h-g

27 dic = {"a": a,"b": b, "c": c, "d": d, "e": e,"f": f,"g": g, "h": h, "i"

: i, "j": j}

28 while e <= 0 or d<= 0 or c<=0 or b<=0 or a<=0 or e != int(e) or d !=

int(d) or c != int(c) or b != int(b) or a != int(a) or not control(dic)

:

29 j = randint(min , max)

30 i = randint(min , max)

31 h = randint(min , max)

32 g = randint(min , max)

33 f = randint(min , max)

34 e = L-i-h-f

35 d = -(1/2)*L+j+i+h

36 c =(3/2)*L-j-i-h-g-f

37 b = -(1/2)*L+h+g+f

38 a = L-j-h-g

39 dic = {"a": a,"b": b, "c": c, "d": d, "e": e,"f": f,"g": g, "h": h,

"i": i, "j": j}

40 z += 1

41 if z == 1000000: #pour garantir que le programme se termine après

un certain temps

42 return str("Impossible de créer une telle étoile!")

43

44 return dic

45

46 def étoile_six ():

47 """Choisit d'une façon aléatoire les paramètres c, j, i, h, k, l et

calcule alors les variables restantes a, b, d, e, f, g pour créer une é

toile magique de 6 pointes et de somme L"""

48 z = 0

49 dic = {}

50 l = randint(min , max)

51 k = randint(min , max)

52 j = randint(min , max)

53 i = randint(min , max)

54 h = randint(min , max)

55 c = randint(min , max)

56 g = L-k-j-h

57 f = L-l-i-c

58 e = l-h+c

59 d = -L+l+k+j+i+h

60 b = L-l-k-c

61 a = L-l-j-i

62 dic = {"a": a,"b": b, "c": c, "d": d, "e": e,"f": f,"g": g, "h": h, "i"

: i, "j": j, "k": k, "l": l}

63 while g <= 0 or f <= 0 or e <= 0 or d<= 0 or b<=0 or a<=0 or not

control(dic):

64 l = randint(min , max)

65 k = randint(min , max)

66 j = randint(min , max)

67 i = randint(min , max)

33

68 h = randint(min , max)

69 c = randint(min , max)

70 g = L-k-j-h

71 f = L-l-i-c

72 e = l-h+c

73 d = -L+l+k+j+i+h

74 b = L-l-k-c

75 a = L-l-j-i

76 dic = {"a": a,"b": b, "c": c, "d": d, "e": e,"f": f,"g": g, "h": h,

"i": i, "j": j, "k": k, "l": l}

77 z += 1

78 if z == 1000000: #pour garantir que le programme se termine après

un certain temps

79 return str("Impossible de créer une telle étoile!")

80

81 return dic

82

83 def étoile_sept ():

84 """Choisit d'une façon aléatoire les paramètres h, i, j, k, l, m, n et

calcule alors les variables restantes a, b, c, d, e, f, g pour créer

une étoile magique de 7 pointes et de somme L"""

85 z = 0

86 dic = {}

87 n = randint(min , max)

88 m = randint(min , max)

89 l = randint(min , max)

90 k = randint(min , max)

91 j = randint(min , max)

92 i = randint(min , max)

93 h = randint(min , max)

94 g = L-m-l-h

95 f = -(1/2)*L+m+l+n

96 e = (3/2)*L-m-l-k-j-n

97 d = -(1/2)*L+l+k+j

98 c = (3/2)*L -l-k-j-i-h

99 b = -(1/2)*L+j+i+h

100 a = L-j-i-n

101 dic = {"a": a,"b": b, "c": c, "d": d, "e": e,"f": f,"g": g, "h": h, "i"

: i, "j": j, "k": k, "l": l, "m": m, "n": n}

102 while g <= 0 or f<= 0 or e <= 0 or d<= 0 or c<=0 or b<=0 or a<=0 or f

!= int(f) or e != int(e) or d != int(d) or c != int(c) or b != int(b)

or not control(dic):

103 n = randint(min , max)

104 m = randint(min , max)

105 l = randint(min , max)

106 k = randint(min , max)

107 j = randint(min , max)

108 i = randint(min , max)

109 h = randint(min , max)

110 g = L-m-l-h

111 f = -(1/2)*L+m+l+n

112 e = (3/2)*L-m-l-k-j-n

113 d = -(1/2)*L+l+k+j

114 c = (3/2)*L -l-k-j-i-h

115 b = -(1/2)*L+j+i+h

116 a = L-j-i-n

117 dic = {"a": a,"b": b, "c": c, "d": d, "e": e,"f": f,"g": g, "h": h,

"i": i, "j": j, "k": k, "l": l, "m": m, "n": n}

118 z += 1

119 if z == 1000000:#pour garantir que le programme se termine après un

34

certain temps

120 return str("Impossible de créer une telle étoile!")

121

122 return dic

123

124 def draw_cinq(d, L):

125 """Pour dessiner l'étoile avec 5 pointes"""

126 root = tkinter.Tk()

127 canvas = tkinter.Canvas(root , width =320, height =320, bg = "white")

128 canvas.pack()

129 w = 312

130 h = 312

131 step = 12

132 line = canvas.create_line(w//2, 20, w//6, h-12 , width = 2)

133 line = canvas.create_line(w//2, 20, w-w//6, h-12, width = 2)

134 line = canvas.create_line (12, 2/5 * h, w-12, 2/5 * h, width = 2)

135 line = canvas.create_line (12, 2/5 * h, w-w//6, h-12, width = 2)

136 line = canvas.create_line(w-12, 2/5 * h, w//6, h-12, width = 2)

137 canvas.create_text(w//2, 12, fill="black", font="Arial 14", text = d["a

"])

138 canvas.create_text(w -3/10 * w, 7/20*h, fill="black", font="Arial 14",

text = d["b"])

139 canvas.create_text(w-12, 7/20*h, fill="black", font="Arial 14", text =

d["c"])

140 canvas.create_text(w-w//5, 7/12 * h, fill="black", font="Arial 14",

text = d["d"])

141 canvas.create_text(w-w//6, h, fill="black", font="Arial 14", text = d["

e"])

142 canvas.create_text(w//2, 4/5 * h, fill="black", font="Arial 14", text =

d["f"])

143 canvas.create_text(w//6, h, fill="black", font="Arial 14", text = d["g"

])

144 canvas.create_text(w//5, 7/12 * h, fill="black", font="Arial 14", text

= d["h"])

145 canvas.create_text (12, 7/20 * h, fill="black", font="Arial 14", text =

d["i"])

146 canvas.create_text (3/10 * w, 7/20*h, fill="black", font="Arial 14",

text = d["j"])

147 canvas.create_text(w//2, h//2 + step , fill="black", font="Arial 24",

text = L)

148

149 def draw_six(d, L):

150 """Pour dessiner l'étoile avec 6 pointes"""

151 root = tkinter.Tk()

152 canvas = tkinter.Canvas(root , width =320, height =320, bg = "white")

153 canvas.pack()

154 w = 312

155 h = 312

156 step = 20

157 line = canvas.create_line(w//2, step , w-step , 3/4*h , width = 2)

158 line = canvas.create_line(w//2, step , step , 3/4 * h, width = 2)

159 line = canvas.create_line(step , 3/4 * h , w-step , 3/4 * h, width = 2)

160 line = canvas.create_line(step , 1/4 * h , w-step , 1/4 * h, width = 2)

161 line = canvas.create_line(step , 1/4 * h, w//2, h-step , width = 2)

162 line = canvas.create_line(w-step , 1/4 * h, w//2, h-step , width = 2)

163 canvas.create_text(w//2, 12, fill="black", font="Arial 14", text = d["a

"])

164 canvas.create_text(w -3/10 * w, 1/5*h, fill="black", font="Arial 14",

text = d["b"])

165 canvas.create_text(w-12, 1/5*h, fill="black", font="Arial 14", text = d

35

["c"])

166 canvas.create_text(w-w//6, h//2, fill="black", font="Arial 14", text =

d["d"])

167 canvas.create_text(w-12, 4/5*h, fill="black", font="Arial 14", text = d

["e"])

168 canvas.create_text(w -3/10*w, 4/5 * h, fill="black", font="Arial 14",

text = d["f"])

169 canvas.create_text(w//2, h-12, fill="black", font="Arial 14", text = d[

"g"])

170 canvas.create_text (3/10*w, 4/5 * h, fill="black", font="Arial 14", text

= d["h"])

171 canvas.create_text (12, 4/5 * h, fill="black", font="Arial 14", text = d

["i"])

172 canvas.create_text(w//6, h//2, fill="black", font="Arial 14", text = d[

"j"])

173 canvas.create_text (12, 1/5 * h, fill="black", font="Arial 14", text = d

["k"])

174 canvas.create_text (3/10 * w, 1/5 * h, fill="black", font="Arial 14",

text = d["l"])

175 canvas.create_text(w//2, h//2 , fill="black", font="Arial 24", text = L

)

176

177 def draw_sept(d, L):

178 """Pour dessiner l'étoile avec 7 pointes"""

179 root = tkinter.Tk()

180 canvas = tkinter.Canvas(root , width =320, height =350, bg = "white")

181 canvas.pack()

182 w = 312

183 h = 312

184 step = 20

185 line = canvas.create_line(w//2, step , 3/10 * w, h-step , width = 2)

186 line = canvas.create_line(w//2, step , w- 3/10*w, h-step , width = 2)

187 line = canvas.create_line (1/10 * w, 1/5 * h , w -3/10*w, h-step , width =

2)

188 line = canvas.create_line (1/10 * w, 1/5 * h , w-step , 3/5 * h, width =

2)

189 line = canvas.create_line(step , 3/5 * h, w-step , 3/5 * h, width = 2)

190 line = canvas.create_line(w -1/10*w, 1/5 * h, step , 3/5 * h, width = 2)

191 line = canvas.create_line(w -1/10*w, 1/5 * h, 3/10*w, h-step , width = 2)

192 canvas.create_text(w//2, 12, fill="black", font="Arial 12", text = d["a

"])

193 canvas.create_text(w -4/10 * w, 3/10*h, fill="black", font="Arial 12",

text = d["b"])

194 canvas.create_text(w-12, 2/10*h, fill="black", font="Arial 12", text =

d["c"])

195 canvas.create_text(w-w//5, h//2 -step , fill="black", font="Arial 12",

text = d["d"])

196 canvas.create_text(w, 3/5*h, fill="black", font="Arial 12", text = d["e

"])

197 canvas.create_text(w -3/10*w, 13/20 * h, fill="black", font="Arial 12",

text = d["f"])

198 canvas.create_text(w-w//4, h-12, fill="black", font="Arial 12", text =

d["g"])

199 canvas.create_text(w//2, 8/10*h, fill="black", font="Arial 12", text =

d["h"])

200 canvas.create_text(w//4, h-12, fill="black", font="Arial 12", text = d[

"i"])

201 canvas.create_text(w*3/10, h * 13/20, fill="black", font="Arial 12",

text = d["j"])

202 canvas.create_text (12, 3/5 * h, fill="black", font="Arial 12", text = d

36

["k"])

203 canvas.create_text(w//5, h//2-step , fill="black", font="Arial 12", text

= d["l"])

204 canvas.create_text (12, 2/10 * h, fill="black", font="Arial 12", text =

d["m"])

205 canvas.create_text (4/10 * w, 3/10 * h, fill="black", font="Arial 12",

text = d["n"])

206 canvas.create_text(w//2, h//2 , fill="black", font="Arial 24", text = L

)

207

208 L = int(input("Entrez la somme: "))

209 n = int(input("Entrez le nombre de pointes (5, 6 ou 7): "))

210 min = 0

211 max = 100

212

213 while n != 5 and n != 6 and n != 7: #pour garantir que l'utilisateur entre

un nombre valable de pointes

214 print("{0} n'est pas un nombre valable de pointes".format(n))

215 n = int(input("Entrez le nombre de pointes (5, 6 ou 7): "))

216

217 if n == 5:

218 s = étoile_cinq ()

219 print(s)

220 if s != str("Impossible de créer une telle étoile!"):

221 for k,v in s.items():

222 s[k] = int(v)

223 draw_cinq(s, L)

224

225 if n == 6:

226 s = étoile_six ()

227 print(s)

228 if s != str("Impossible de créer une telle étoile!"):

229 for k,v in s.items():

230 s[k] = int(v)

231 draw_six(s, L)

232

233 if n == 7:

234 s = étoile_sept ()

235 print(s)

236 if s != str("Impossible de créer une telle étoile!"):

237 for k,v in s.items():

238 s[k] = int(v)

239 draw_sept(s, L)

37

5 Conclusion

À travers ce projet nous avons constaté la multitude de possibilités dans la recherched'objets magiques. Il est toujours possible de trouver une �gure ou un exemple l'un plusintéressant que l'autre, ce qui rend cette thématique très passionnante.Pour cette raison, il est aussi compliqué de trouver une �n à ce projet, car la recherche denouvelles �gures ne s'arrête jamais.De plus l'utilisation de l'arithmétique modulaire s'est avérée très utile a�n de mieux sefamiliariser avec certains principes des �gures magiques et de plus facilement trouver descas complexes, comme par exemple le carré magique d'ordre 3 au carrés (traité à la section3.3).Pour conclure nous estimons que ce projet fût un succès, même si, manquant de temps,nous aurions aimé approfondir encore plus sur certains points.

38

Références

https://en.wikipedia.org/wiki/Magic_circle_(mathematics)

39