• Aucun résultat trouvé

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
40
0
0

Texte intégral

(1)

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érimentales Université du Luxembourg

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

(2)

Table des matières

1 Introduction 2

2 Carré magique d'ordre3 3

2.1 Système linéaire. . . 3

2.2 Programme . . . 5

3 Carré magique dans l'arithmétique modulaire 7 3.1 Arithmétique modulaire . . . 7

3.2 Carré magique d'ordre3 en arithmétique modulaire . . . 7

3.3 Carré magique au carrés d'ordre3 . . . 10

3.4 Relation entre carrés magiques d'ordre3 en arithmétique modulaire. . . 13

3.5 Carré 4×4: puissance de n . . . 18

4 Objets magiques 23 4.1 Cercle magique . . . 23

4.2 Relation Carré-Cercle magiques . . . 27

4.3 Étoiles . . . 29

5 Conclusion 38

(3)

1 Introduction

Un carré magique est une grille carrée contenant des nombres positifs et de préférence distincts, disposés d'une façon spéciale. L'arrangement de ces nombres est de sorte que la somme de chaque ligne, chaque colonne et chaque diagonale soit le même nombre. Ces carrés magiques fascinent les humains depuis plusieurs siècles. Les premières archives de carrés magiques remontent à2200av. 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 le dos d'une tortue divine dans le Fleuve Jaune. Les recherches à propos des carrés magiques continuent encore à nos jours en essayant de trouver des versions jugées plus esthétiques ou intéressantes que d'autres. Par exemple, les carrés magiques constitués de nombres au carré. Si pour un tel carré de dimension 4, Euler trouva déjà une solution, personne n'a encore trouvé une solution pour un carré d'ordre3. Étant donné que ce problème n'a pas été prouvé comme impossible, beaucoup de mathématicien continuent à chercher un tel carré. C'est pourquoi nous allons tenter en utilisant l'arithmétique modulaire de trouver un tel carré tout comme d'autres objets magiques.

(4)

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 coecients d'une ligne est égale à celle des autres lignes, des colonnes et des deux diagonales. Ces coecients sont des nombres entiers et généralement distincts.1 On appelle la sommeS ∈N d'un carré magique, la somme des coecients 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 revoir quelques notions basiques pour un carré magique d'ordre3.

2.1 Système linéaire

Prenons un carré de taille3×3rempli de nombres distincts que nous allons, ici, représenter para, 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 sommeS >0 nous avons les conditions suivantes :





















a+b+c=S d+e+f =S g+h+i=S a+d+g=S b+e+h=S c+f+i=S a+e+i=S c+e+g=S.

(1)

En additionnant les équations aveceet 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 foisS, on en déduit que : 3e=S.

De plus il est possible d'exprimer toutes les entrées du carré en fonction d'a, bet e. Donc il sut de choisir3 nombres comme paramètres et on retrouve donc automatiquement un carré magique. Pour trouver ces expressions, il sut de résoudre le système d'équations que nous avons montré au début de cette section, tout en remplaçantS par3e. En utilisant la première équation, p. ex., nous trouvons :

c= 3e−a−b.

1. Nous allons justement nous focaliser sur des objets magiques à coecients distincts dans ce rapport.

(5)

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

























 a=a b=b

c= 3e−a−b d= 4e−2a−b e=e

f = 2a+b−2e g=a+b−e h= 2e−b i= 2e−a.

(2)

Un carré magique d'ordre3est donc de la forme suivante :

a b 3e−a−b

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

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

(6)

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

9 8 16

18 11 4

6 14 13

Eectivement en additionnant les nombres de la première rangée, représentés par le fond jaune, 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 par le fond bleu (9 + 11 + 13 = 33). On constate exactement le même phénomène pour toutes les rangées, les colonnes ou la diagonale restantes.

2.2 Programme

Nous avons aussi programmé un algorithme qui calcule et représente un carré magique avec cette méthode. Ce programme demande à l'utilisateur d'entrer trois valeurs, corres- pondant donc aux paramètresa, betedécrits ci-dessus. Il calcule alors les autres valeurs, en utilisant le système d'équations (2), telles que la somme du carré soit3e. Finalement le programme ache 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) :

(7)

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ètres a= 67, b= 87ete= 98 :

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

(8)

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'ordre3 à coecients au carré, il peut s'avérer utile d'introduire ici la notion d'arithmétique modulaire an de faciliter la formation de carré magique plus compliqué. L'arithmétique modulaire est un outil inventé en1801par Carl Friederich Gauss, qui simplie les calculs et raisonnements arithmé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 : soient aetndeux nombres entiers, calculer a mod(n)revient à déterminer le reste de la division euclidienne de a par n. Cela va simplier nos calculs pour les carrés magiques, car nous pourrons remplir le carré de nombres distincts qui en calcul modulaire auront la même valeur, nous laissant donc plus de liberté. Par exemple : 18mod(7) = 32mod(7). Nous allons donc pour ces raisons nous tourner plus souvent vers l'arithmétique modulaire lors de 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- tion2.1tout en utilisant l'arithmétique modulaire. Il sura donc que la somme de chaque ligne, de chaque colonne et des diagonales, soit égale à un nombre S mod(n). Nous avons donc programmé un algorithme qui fait exactement cela et représente le carré obtenu. Il sut à l'utilisateur d'entrer la somme qu'il souhaite avoir, comme par exemple3mod(4). Le programme choisit alors d'une façon aléatoire les valeurs sur les diagonales. Puis il calcule les valeurs restantes du carré, tout en garantissant que les valeurs soient toutes distinctes et de sorte que la somme de chaque ligne, chaque colonne et chaque diagonale soit celle demandée par l'utilisateur. Au cas où le programme ne trouverait pas de valeurs qui conviennent, il recommence ce procédé du début jusqu'à ce qu'il obtienne un carré magique respectant les conditions. Finalement le programme ache 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

(9)

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

def draw_grid (grid):

(10)

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 est4mod(91) respectivement123mod(87):

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

(11)

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

Comme mentionner précédemment la recherche d'un carré magique d'ordre3au coecients aux carrés reste un problème ouvert. Cependant en utilisant l'arithmétique modulaire, il nous est possible de trouver des carrés magiques respectant ces conditions. Nous avons même programmé un algorithme se basant sur le programme de la section3.2.

Le programme fonctionne de la même façon, sauf qu'on y rajoute la condition que les coecients doivent être des nombres entiers aux carrés. Voici deux exemples d'utilisation du programme, où les sommes exigées sont0mod(25) et0mod(90) respectivement.

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

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

(12)

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)

(13)

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

(14)

3.4 Relation entre carrés magiques d'ordre3en 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 m1mod(n1) etm2mod(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+m2mod(pgcd(n1, n2)). (b) Considérons le carré magique suivant de somme m mod(n) :

(15)

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 sut de calculer la somme des coecients d'une ligne/colonne pour obtenir la somme du carré.

(a) Calculons la somme du carré somme suivant la première ligne, pourk, q∈Z: (a1+a2) + (b1+b2) + (c1+c2) = (a1+b1+c1) + (a2+b2+c2)

= m1mod(n1) +m2mod(n2)

= m1+n1·k+m2+n2·q

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

pgcd(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ère ligne, pourq ∈Z :

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

= k·(m mod(n))

= k·(m+q·n)

= k·m+k·q·n

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

= k·m mod(k·n).

(16)

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

Alors le carré somme est le suivant :

Calculons la somme du carré somme à l'aide de la formule :

On am1= 2,m2 = 3,n1= 39etn2 = 65, ainsi on obtient 2 + 3 = 5etpgcd(65,39) = 13, donc la somme du carré somme est égal à5mod(13).

Vérions 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 somme4mod(5)suivant et multiplions le par 5 :

(17)

Alors on obtient le carré suivant :

En utilisant la formule, on obtient comme somme5·4mod(5·5)c'est-à-dire20mod(25). Vérions 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 proposition1pour obtenir un carré modulo n1·n2. Corollaire 1. Supposons qu'on a deux carrés magiques de sommem1mod(n1)etm2 mod(n2). En additiant le premier carré multiplié parn2 avec le deuxième multiplié parn1, on obtient un carré magique de sommem1·n2+m2·n1 mod(n1·n2).

Démonstration. C'est une conséquence de Prop.1

Multiplions d'abord le premier carré magique de somme m1mod(n1) par n2, alors par Prop. 1(b), on obtient un carré de somme m1 ·n2mod(n1 ·n2). En mutipliant alors le deuxième carré de somme m2 mod(n2) par n1, on obtient, par Prop. 1(b), un carré de somme m2·n1mod(n1·n2). Finalement, en additionnant les deux carrés magiques ainsi obtenu, on obtient, par Prop.1(a), un carre magique de sommem1·n2+m2·n1mod(n1·n2), car lepgcd(n1·n2, n1·n2) =n1·n2.

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

(18)

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érions le en calulant la somme, selon la première ligne :

78 + 301 + 281 = 660

= 15·44

= 0mod(15).

(19)

3.5 Carré 4×4 : puissance de n

An de trouver un carré magique contenant que des puissances d'un certain nombren∈N, il faut eectuer plusieurs étapes. Tout d'abord, il faut choisir un nombre natureln. Ensuite, il s'agit de trouver une formule générale donnant les deux derniers chires de la puissance de ce nombre naturel n. Pour obtenir un carré magique de taille 4×4, il faut trouver les deux mêmes derniers chires pour chaque quatrième puissance. Pour trouver une telle formule, il serait utile de calculer les huit premières puissances de n pour s'inspirer et vérier qu'il y a bien une répétition. Si cela est le cas, on peut trouver une formule générale pour calculer les puissances de n mod(100). Finalement, il sut juste encore de calculer la somme des nombres formés par les derniers chires des puissances. Après ceci, il faut arranger les puissances dans le carré magique d'une manière à trouver dans chaque ligne, chaque colonne et chaque diagonale les quatre puissances diérentes.

An de mieux comprendre, faisons un exemple : 1. Prenons le nombre natureln= 7.

2. Regardons les8 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 an d'obtenir un carré magique contenant que des puissances de 7 et de somme0mod(100).

Voici un exemple d'un tel carré :

(20)

Eectivement la somme des diagonales, des colonnes et des rangées équivaut à0mod(100).

Nous avons aussi programmé un algorithme qui demande à l'utilisateur un entiernet crée si possible un carré magique d'ordre4 formé que de puissance de cet entiern.

S'il est possible de créer un tel carré magique grâce à la méthode indiquée ci-dessus le programme commence par calculer la somme des diagonales, colonnes et rangées. Ensuite il choisit d'une façon aléatoire les exposants tels que le carré, dont les coecients sont l'entiern élevé à ces exposants, soit magique.

Finalement le programme ache la somme et le carré dont les coecients sont les exposants auquel il faudrait élever le nombre n. Pour mieux comprendre l'achage du programme voici 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'utilisateur le programme achera un message indiquant qu'il ne lui est pas possible de le créer. Voici un autre exemple du programme pour le nombre13:

(21)

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]

(22)

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

(23)

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

112 check_if_possible (x)

(24)

4 Objets magiques

Il est évidemment possible d'appliquer le principe du carré magique à d'autes gures. Il faudra 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 an de trouver de tels cercles magiques.

Comme exemple, voici le premier cercle magique avec lequel nous avons travaillé :

La somme de chaque anneau est200et la somme de chaque diamètre est325. En utilisant l'arithmétique modulaire on peut prendremodulo(25)an que la somme des anneaux et la somme des lignes soient égales à0mod(25). Le25au milieu du cercle représente justement cela.

(25)

Pour la construction de ce cercle nous avons utilisé le carré magique de taille3×3, dont les coecients sont les nombres de1 à 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 au nombre précédent (le groupe radial de1est1,11,21, ..., de2est2,12,22, ..., etc.) et on en garde les5 premiers nombres de chaque groupe.

Puis on alterne chaque groupe radial sur les lignes de diamètre. De plus il faut alterner l'ordre du groupe radial, c'est-à-dire qu'on commence une fois avec le plus petit nombre sur le cercle extérieur et sur la ligne suivante avec le plus grand nombre sur le cercle extérieur.

La seule exception est pour le chire5où on utilise les 9 premiers multiples de ce dernier dans l'anneau central. On positionne les multiples de sorte que les sommes soient égales à 0mod(25), à part le nombre25 qui est positionné au centre.

Voici un deuxième exemple :

On a eectué les mêmes calculs pour un cercle modulo125cette fois-ci. L'inspiration pour l'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 50 au nombre précédent. Sur l'anneau central on y place les multiples de , en positionnant

(26)

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

Nous avons constaté par après qu'eectivement il susait de tout multiplier par5 ce qui nous a permis de programmer un algorithme qui calcule un cercle magique en arithmétique modulaire pour tout multiple de25 :

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]

(27)

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 magique dont la somme sur les lignes et les cercles équivaut à0mod(300) ou même0mod(99975):

Figure 1 0mod(300)

Figure 2 0mod(99975)

(28)

4.2 Relation Carré-Cercle magiques

On peut trouver le même système d'équations pour un cercle magique à deux anneaux avec deux lignes de diamètre et un carré magique de taille3×3.2 Nous allons représenter les coecients du carré par les lettres d'aà icomme dans la section 2.1. Le but étant de trouver les emplacements de ces variables dans le cercle an que ce dernier soit magique si le carré l'est aussi.

Proposition 2. Pour tout carré magique de taille3×3 avec sommeS = 3e, soit le cercle associé suivant :

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

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





a+c+i+g=S0 f+h+b+d=S0 a+h+b+i=S0 c+d+g+f =S0.

(3)

Par la section 2.1, on sait qu'un carré magique d'ordre 3 est représenté par les équations suivantes, aveca,b etecomme paramètres xes :

























 a=a b=b

c= 3e−a−b d= 4e−2a−b e=e

f = 2a+b−2e g=a+b−e h= 2e−b i= 2e−a.

(4)

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

(29)

Il sut 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= 4e f +h+b+d= 4e a+h+b+i= 4e c+d+g+f = 4e.

(6)

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

Exemple 4. Constituons un carré magique à l'aide de notre porgramme présenté à la section2.2en prenant pour paramètres a= 52,b= 117ete= 65:

Alors le cercle associé est :

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

(30)

4.3 Étoiles

Dénition 3. Une étoile magique est constituée de segments reliants les pointes de l'étoile entre elles. Les coecients de l'étoile se trouvent sur chaque pointe et à chaque intersection de ces segments. Voici par exemple une étoile à 5 pointes dont les coecients sont les variables distinctes de aà j.

L'étoile est considérée magique si les sommes des coecients sur chaque segment sont égales entre elles.

Prenons l'étoile présentée dans la dénition, nous nous retrouvons ainsi avec les conditions suivantes (pourS ∈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 coecients représentés ici par j, i, h, g etf ∈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.

(31)

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

On constate qu'eectivement la somme des coecients sur chaque segment est égale à24. De plus chaque coecient respecte les équations données par le système dépendant des cinq 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 quelques exemples aux coecients intéressants :

Figure 3 Nombres pairs avec somme S= 128.

(32)

Figure 4 Nombres impairs avec somme S = 68.

Figure 5 Nombres premiers avec sommeS = 246.

Figure 6 Multiples de 19 avec sommeS= 456.

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

(33)

Comme exemple d'utilisation du programme voici trois étoiles où l'utilisateur a demandé des étoiles à respectivement5,6et7 pointes et de somme78 :

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 dic = {}

(34)

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)

(35)

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

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

Références

Documents relatifs

Lorsque Nanard grandit, deux petites pattes poussent à l’arrière de

- La politique budgétaire mise en place à travers les dépenses publiques et les recettes publiques : politique de relance de la conjoncture avec une hausse des dépenses pour

Ce quadrilatère a pour sommets les quatre objectifs de la politique économique d’un Etat : le taux de croissance, le solde de la balance commerciale, le taux d’inflation

Dans une première partie, nous justifierons le fait que le Carré Magique reste un bon instrument permettant d’effectuer une interprétation sur la conjoncture d’un

On vérifie aisément que les propriétés précédentes entraînent l’égalité de la somme des carrés des nombres lus en ligne de gauche à droite et celle des carrés des nombres

Ainsi dans le premier carré à remplir situé en haut et au milieu et de couleur vert clair, on reproduit le carré magique 3x3, puis dans le carré situé en bas à droite de

L'entier n &gt; 1 étant fixé à l'avance, démontrer qu'il est possible de placer les entiers de 1 à n⁴ dans les cases d'un tableau carré n² x n² de telle sorte que la somme

I.1 Caractérisation analytique d’une droite4. I.3 Droites parallèles,