ÉCS2 Algorithme de Kaprekar T.D.no1
1 Objectifs
À travers l’exploration un peu ludique d’un algorithme, renouer avec les
fondements de la programmation en Scilab : les types d’objets les plus cou-
rants (réels, vecteurs, matrices ...) et les structures (tests, boucles, fonctions
...).
2 Algorithme de Kaprekar
L’algorithme de Kaprekar est un algorithme qui
transforme un nombre entier en un autre, de fa-
çon répétitive jusqu’à arriver à un cycle. Il fut
couvert en  par le mathématicien indien
Dattatreya Ramachandra Kaprekar pour les
nombres de quatre chiffres, mais il peut être gé-
néralisé à tous les nombres.
2.1 Description de l’algorithme
¬Choisir un nombre n;
Soit n1le nombre obtenu en rangeant les chiffres de ndans l’ordre
croissant et n2le nombre obtenu en rangeant les chiffres de ndans
l’ordre décroissant ;
®Le nombre de Kaprekar formé à partir de nest K(n)déf.
=n1n2;
¯Recommencer les points ,®&¯avec K(n)à la place de n.
Exemple :
n410 396 594
n1410 963
n2041 369
K(n) 396 594
1. Compléter le tableau précédent. Que constate-t-on ?
2. Essayer avec un autre nombre à 3chiffres non identiques de votre choix.
Que constate-t-on ?
3. Et en partant de 111 ?
Dans la suite de l’algorithme, on souhaite
vérifier informatiquement la conjecture
En itérant l’algorithme de Kaprekar en partant d’un nombre à 3chiffres,
on finit par tomber sur 495 ou sur 0.
On dit que la suite obtenue est stationnaire, c’est-à-dire constante à
partir d’un certain rang ;
·explorer ce qui se passe en partant de nombres à 4ou 5(voire plus)
chiffres.
2.2 Programmation de l’algorithme
Afin de programmer l’algorithme de Kaprekar, on définit les deux fonc-
tions suivantes :
t=3// t=taille=nombre de chiffres
function c=code(x)
c=zeros(1,t)
y=0
for k=1:t
c(k)=floor((x-y)/10^(t-k))
y=y+c(k)*10^(t-k)
end
endfunction
function x=decode(c)
x=sum(10^(t-(1:t)).*c)
endfunction}
4. Faire des essais pour comprendre le but de ces fonctions.
5. Expliquer le rôle de chaque ligne de ces fonctions.
6. À l’aide de la fonction gsort et des deux fonctions précédentes, écrire
une fonction d’en-tête
function k=kaprekar(x)
qui applique (une fois) l’algorithme de Kaprekar à x.
Lycée Henri Poincaré 1/2 lo
ÉCS2 Algorithme de Kaprekar T.D.no1
7. S’assurer que la fonction Kaprekar fonctionne lorsque xvaut 0.
8. Écrire une fonction d’en-tête
function l=liste(x,n)
calculant la liste des npremiers termes de la suite de Kaprekar
x, K(x),K(K(x)), . . .
9. À l’aide de la fonction find, écrire une fonction cycle(x) qui calcule
la liste des termes de la suite de Kaprekar d’origine xjusqu’à ce qu’on
tombe sur un terme déjà rencontré. On fera apparaître ce terme à la
fin de la liste afin voir quel est le terme répété. Concrètement, on doit
obtenir les exécutions suivantes :
-->cycle(111)
ans =
111. 0. 0.
-->cycle(410)
ans =
410. 396. 594. 495. 495.
10. Pour quelle raison est-on sûr, même si la conjecture n’est pas encore
validée, de retomber sur un nombre déjà rencontré ?
Autrement dit, la suite devient nécessairement cyclique ...
11. Écrire une fonction chute(x) calculant la valeur finale de la liste générée
par cycle(x).
2.3 Validation de la conjecture pour trois chiffres
12. Quelle liste ygénère le script suivant :
r=10^t
y=zeros(1,r);
for k=0:r-1
y(k+1)=chute(k);
disp([k y(k+1)])
end
13. Compléter l’instruction plot2d(....,y,0) pour faire apparaître les
points (n, chute(n)) pour n[[0 ; 999]] sur un graphique.
14. Essayer plot2d(....,y,-1). Ce graphique valide-t-il la conjecture ?
15. Utiliser la liste yet la fonction find pour déterminer exactement tous
les entiers dont la chute est 0.
16. Préciser alors la conjecture.
2.4 Exploration du cas “quatre chiffres”
17. En remplaçant t=3 par t=4, explorer le cas « quatre chiffres », émettre
une conjecture analogue et la valider.
2.5 Exploration du cas “cinq chiffres”
18. Avec t=5, que donne cycle(12345) ?
19. Les suites Kaprekar à 5chiffres sont-elles toutes stationnaires ?
20. Les suites Kaprekar à 5chiffres sont-elles toutes cycliques à partir d’un
certain rang ?
2.6 Et avec juste “deux chiffres” ?
21. À vous de voir, et d’expliquer, voire de démontrer !
3 Pour information
Chiffres Cycles possibles Descriptions
2 2 (0)
(9 81 63 27 45)
3 2 (0)
(495)
4 2 (0)
(6174)
5 4 (0)
(53955 59994)
(61974 82962 75933 63954)
(62964 71973 83952 74943)
Lycée Henri Poincaré 2/2 lo
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !