Devoir d`informatique Suite de Syracuse — Carrés magiques

publicité
Vincent Neiger et Henri Lastakowski
2010–2011
Devoir d’informatique
Suite de Syracuse — Carrés magiques
1
Suite de Syracuse
“Take any natural number n. If n is even, divide it by 2 to get n/2, if n is odd multiply
it by 3 and add 1 to obtain 3n + 1. Repeat the process indefinitely.” 1
La suite de Syracuse (sn ) est définie par récurrence :
sn
si sn est pair
∗
2
s0 ∈ N et ∀n ∈ N, sn+1 =
3 · sn+1 + 1 sinon
Q 1.a)
Calculez quelques valeurs de la suite pour différentes valeurs de s0 : 8, 9, 10,
11 et 12.
Est-il utile de continuer les calculs lorsqu’un des termes de la suite vaut 1 ?
Q 1.b)
Écrivez un algorithme syracuse qui calcule les termes successifs de la suite
(sn ) et les stocke dans un tableau. Cette fonction ne s’arrêtera de calculer que si elle trouve un
terme de la suite valant 1.
Implantez cet algorithme en matlab.
Parmi toutes les fonctions matlab que vous avez déjà écrites, celle-ci semble la plus « dangereuse » : devinez pourquoi.
Q 1.c)
À l’aide de cette fonction, calculez les valeurs de la suite pour de nombreuses
valeurs initiales.
Quelle conjecture peut-on faire sur la suite de Syracuse ?
Q 1.d) Temps de vol de la suite :
Modifiez la fonction syracuse pour obtenir syracuse_nb, qui au lieu de renvoyer le
tableau de valeurs de la suite renvoie le plus petit nombre d’itérations nécessaires à l’obtention
d’un terme valant 1.
Q 1.e) Altitude maximale de la suite :
Modifiez la fonction syracuse pour obtenir syracuse_alt, qui au lieu de renvoyer le
tableau de valeurs de la suite renvoie le maximum de la suite (ie. le plus grand entier atteint
par les termes de la suite).
Q 1.f) Tracé graphique des résultats :
Écrivez une fonction syracuse_tr qui lance une fenêtre graphique affichant les temps de
vol et les altitudes maximale de la suite de Syracuse pour toutes les valeurs initiales comprises
entre deux entiers i et j tels que i < j.
Que remarquez-vous sur le graphique de syracuse_tr(1,100) ?
1. D’après wikipedia anglophone
Devoir d’informatique
Suite de Syracuse — Carrés magiques
Matlab – DM
2
2.1
2/3
Carré magique
Définition et premières propriétés
Définition. Pour un entier n > 1, un carré magique d’ordre n est une matrice carrée d’ordre n dont
les coefficients sont tous les entiers de 1 à n2 de sorte que les sommes des nombres sur chaque ligne, sur
chaque colonne ainsi que sur les deux diagonales principales soient égales à un même nombre sn . Cette
somme sn est appelée constante magique d’un carré magique d’ordre n.
Q 2.a)
Combien existe-t-il de carrés magiques d’ordre 1 ? Et d’ordre 2 ?
Dans la suite, on admettra 2 qu’il existe un carré magique d’ordre n pour tout n > 3. Ceci
implique en particulier que la constante sn existe pour n > 3.
Q 2.b)
2.2
Soit n ∈ N∗ − {2}. Calculez la constante magique sn en fonction de n.
Carrés magiques de taille impaire : méthode siamoise
Cette méthode de construction a été introduite en France par Simon de La Loubère à la fin
du XVIIe siècle alors qu’il revenait de son ambassade au Siam (ancien nom de la Thaïlande).
Soit n un entier impair supérieur à 3 : n = 2p + 1 avec p > 1.
Notre but est de construire les coefficients d’une matrice A d’ordre n de sorte qu’une fois
tous les coefficients construits, cette matrice forme un carré magique.
Dans cette partie, les indices dans la matrice sont considérés modulo n : le coefficient (n+1, 1)
est en fait le coefficient (1, 1), le coefficient (3, n + 1) est en fait le coefficient (3, 1), etc. Ceci
revient à imaginer que la première et la dernière ligne sont adjacentes, ainsi que la première et
la dernière colonne : la matrice est vue comme enroulée sur un tore 3 .
Voici un algorithme informel décrivant la méthode siamoise :
– Initialisation : placer 1 au milieu de la première ligne
– Étape itérée : si k est placé en (i, j),
∗ si (i + 1, j + 1) est vide, placer k + 1 dans cette case
∗ sinon, placer k + 1 en (i, j − 1)
Q 2.c) Déroulez l’algorithme à la main (sur du papier) pour construire un carré magique d’ordre 3, puis un carré magique d’ordre 5.
Q 2.d) Modifiez (toujours sur du papier) l’algorithme ci-dessus pour qu’il soit plus
formel. Entre autres :
– précisez les entrées et les sorties de l’algorithme,
– utilisez une boucle (for ou while) pour décrire plus précisément l’itération,
– utilisez des affectations A(i,j) = k pour formaliser l’opération « placer k en (i, j) ».
Q 2.e) Transcrivez cet algorithme en une fonction Matlab methode_siamoise, puis
vérifiez sur des petites valeurs de n que vous obtenez bien un carré magique.
Ainsi, vous savez construire facilement un carré magique d’ordre n pour tout n impair. Les
méthodes de construction des carrés magiques d’ordre pair sont plus difficiles. Une méthode
générale pour construire des carrés magiques d’ordre n > 3, aussi bien pair que impair, a été
2. Des méthodes de construction existent pour obtenir des carrés magiques pour tout n > 3. Par ailleurs, le
nombre de carrés magique d’ordre n augmente très vite avec n : on estime qu’il y a environ 1019 carrés magiques
d’ordre 6, sans compter ceux que l’on obtient à partir d’un autre grâce à des rotations et des réflexions.
3. Un tore est une figure géométrique que vous pourrez observer sur sa page wikipedia.
Matlab – DM
Devoir d’informatique
Suite de Syracuse — Carrés magiques
3/3
publiée en 1976 par William H. Benson et Oswald Jacoby, dans New Recreations With Magic
Squares.
2.3
Est-ce bien un carré magique ?
Q 2.f)
Écrire une fonction Matlab coefficients_magiques qui prend en argument une matrice A et qui renvoie true si A est carrée et si ses coefficients sont exactement
l’ensemble des entiers de 1 à n2 , où n est l’ordre de A ; elle renverra false dans le cas contraire.
Q 2.g) Écrire une fonction Matlab est_magique qui prend en argument une matrice
A et renvoie true si A est un carré magique, false sinon.
Q 2.h) Vérifiez sur quelques exemples que votre algorithme methode_siamoise
construit bien des carrés magiques.
2.4
Carrés magiques de taille impaire : méthode de Bachet (dite du damier crénelé)
Cette méthode est apparue en 1612 dans une publication de Claude-Gaspard Bachet de
Méziriac (Problèmes plaisants et délectables qui se font par les nombres). Elle a donc été connue en
France avant la méthode siamoise.
Cette partie est moins guidée que les précédentes, et par conséquent beaucoup plus difficile.
Lisez le paragraphe correspondant à cette méthode sur wikipedia :
http://fr.wikipedia.org/wiki/Carré_magique_(mathématiques)
Q 2.i) Formalisez cette méthode en un algorithme pour construire des carrés magiques de taille impaire.
Conseils : faites bien attention aux indices dans la matrice. Si vous construisez un carré
magique d’ordre n, utilisez pendant tout l’algorithme une matrice carrée d’ordre 2n − 1, puis
seulement à la fin, recopiez la bonne sous-matrice (le « carré magique qui est au milieu ») dans
une matrice n × n.
Q 2.j) Implémentez cet algorithme en Matlab et vérifiez le résultat obtenu avec quelques
entrées (n’hésitez pas à utiliser est_magique. . . ).
Téléchargement