Dlzlogic a écrit:Concernant le nombre 1 (l'unité), autrefois, il me semble que c'était un nombre premier. Aurait-il perdu ce statut ? Quelle en est la raison ?
Ben oui, on m'avais expliqué qu'un nombre premier n'avait pas d'autre facteur que 1 et lui-même.
C'est bien le cas avec 1, qui n'a pas d'autre facteur que lui-même et 1.
Mais, bon à chaque époque ses définitions.
Voici les carrés magiques constitués de nombre premiers (donc sans le 1), inférieurs à 200, sans répétition:
- Code: Tout sélectionner
Idt Sd Sv ShSa SaSh Sh Sa SvSh
S= 177
17 89 71 17 113 47 71 89 17 71 5 101 47 113 17 47 29 101 101 5 71 101 29 47
113 59 5 89 59 29 5 59 113 89 59 29 29 59 89 113 59 5 29 59 89 5 59 113
47 29 101 71 5 101 101 29 47 17 113 47 101 5 71 17 89 71 47 113 17 71 89 17
S= 267
29 131 107 29 167 71 107 131 29 107 11 149 71 167 29 71 47 149 149 11 107 149 47 71
167 89 11 131 89 47 11 89 167 131 89 47 47 89 131 167 89 11 47 89 131 11 89 167
71 47 149 107 11 149 149 47 71 29 167 71 149 11 107 29 131 107 71 167 29 107 131 29
S= 219
37 79 103 37 139 43 103 79 37 103 7 109 43 139 37 43 67 109 109 7 103 109 67 43
139 73 7 79 73 67 7 73 139 79 73 67 67 73 79 139 73 7 67 73 79 7 73 139
43 67 109 103 7 109 109 67 43 37 139 43 109 7 103 37 79 103 43 139 37 103 79 37
S= 213
41 89 83 41 113 59 83 89 41 83 29 101 59 113 41 59 53 101 101 29 83 101 53 59
113 71 29 89 71 53 29 71 113 89 71 53 53 71 89 113 71 29 53 71 89 29 71 113
59 53 101 83 29 101 101 53 59 41 113 59 101 29 83 41 89 83 59 113 41 83 89 41
S= 309
43 127 139 43 199 67 139 127 43 139 7 163 67 199 43 67 79 163 163 7 139 163 79 67
199 103 7 127 103 79 7 103 199 127 103 79 79 103 127 199 103 7 79 103 127 7 103 199
67 79 163 139 7 163 163 79 67 43 199 67 163 7 139 43 127 139 67 199 43 139 127 43
Matrice non première:
S= 111
7 61 43 7 73 31 43 61 7 43 1 67 31 73 7 31 13 67 67 1 43 67 13 31
73 37 1 61 37 13 1 37 73 61 37 13 13 37 61 73 37 1 13 37 61 1 37 73
31 13 67 43 1 67 67 13 31 7 73 31 67 1 43 7 61 43 31 73 7 43 61 7
La méthode est simple, elle consiste dans un premier temps à dresser la liste des nombres premiers inférieurs à 200.
Ensuite, c'est une recherche un peu bête à partir de trois de ces nombres premiers, sans le 2 tout de même.
En effet, tous les nombres premiers, sauf 2, sont impairs. Comme on fait une somme à trois nombres dans les carrés 3x3, la somme magique est nécessairement impaire (impair+impair = pair et impair + pair = impair).
Donc, si l'on incorpore 2, on a un problème de parité, il n'y aura aucun carré magique 3x3 contenant le nombre premier 2.
Ensuite, il y a donc 45 premiers à "tester", je le fais par ordre croissant.
Pour éviter de compter deux fois les mêmes carrés, j'impose c>a.
Le carré est donc de la forme :
[ a b c ]
[ d e f ]
[ g h i ]
avec S = a+b+c
Comme je ne dispose que d'un Commodore C128D ( 128ko - 2 MHz - 8bits ) pour faire le travail j'utilise un minimum de boucles (trois en fait).
Au début de l'analyse, je pensais en faire une quatrième sur e. Mais c'est inutile.
Considérons que les varaible sont a,b,c et e.
A chaque itération de ma recherche de solution, je peux calculer à partir de a,b,c et e les autres "cases du carré" :
On a : S= a+e+i
Donc on peut exprimer i en fonction de S,a et e
i = S - a - e
De même pour les autres case de la ligne inférieure :
g = S - c - e
h = S - b - e
i = S - a - e
Ma première idée était donc de calculer ainsi g h i pour chaque quadruplet { a b c e }
Mais, on sait que
S = g + h + i
S = S - c - e + S - b - e + S - a - e
S = S - (a+b+c) + 3.e
Or a+b+c=S, on a donc :
S = S - S + 3.e
On retrouve bien la relation utilisée par
Chan79: S=3.e
En fait, il ne sert à rien de chercher les valeurs de e, il faut juste prendre a b et c de telle façon que S=a+b+c soit un multiple par trois d'un des nombres premiers (qui sera donc e).
C'est donc ce que fait mon modeste programme en BASIC qui tourne sur une machine qui a déjà fêté ses 30 ans de loyaux services.
Deux boucles sur a et b sélectionnent séquentiellement les nombres premiers de la liste.
Une boucle supplèmentaire permet de retenir les c tel que e = S/3 = (a+b+c)/3 soit un nombre premier de la liste.
On a alors les quatres variables a b c et e
Le programme calcule (à l'aide de relation utilisant S et les 4 variables) alors successivement i h g d et f dans cet ordre et en passant au c suivant dès que l'un des calculs donne un nombre :
- qui n'est pas un des nombres premier de la liste,
- qui est déjà utilisé dans le carré,
- qui produit un carré symétrique.
- qui ne vérifie pas une relation de somme (la seule a tester est en en fait d+e+f=S)
En particulier, par construction je prends toujours c>a. Il faut aussi surveiller que i>a, g<c et g<a
L'astuce du programme consite à effectuer ces test dans l'ordre et sans perdre de temps. Dès qu'un des nombre est impssible, on teste le c suivant.
Et si l'on arrive au dernier c possible, on boucle sur b puis sur a.
Avec un tel algorithme, sans compiler le programme, un ordinosaure 8bits à 2 MHz de 1982 met environ 1h30 pour imprimer les carrés.
Par contre j'ai une question qui concerne les répétition. En autorisant (une fois) la répérition des nombre premier, pourquoi je n'obtient pas plus de carré magique. Alors que le même programme, en autorisant deux fois chaque répétition produit une quasi infinité de carré magique contenant trois fois chaque nombre premier ?
Question un peu bête. Mais je n'en trouve pas la raison ? Alors qu'avec d'autre nombre (que les nombres premiers), on peut trouver bien plus de solutions en autorisant (même une seule fois) les répétitions!?!