Une situation problème mettant en valeur le langage CoffeeScript

dimanche 28 décembre 2014
par  Alain BUSSER

On constate que

  • 1²+2²=5 qui n’est pas un carré
  • 1²+2²+3²=14 qui n’est pas non plus un carré
  • 1²+2²+3²+4²=30 qui n’est pas non plus un carré
  • 1²+2²+3²+4²+5²=55 qui n’est pas non plus un carré...

Est-il possible d’avoir un carré en additionnant les carrés des entiers successifs ?

la version html pour afficher dans un smartphone
HTML - 17.5 ko
le fichier source sans les marges
tas de boulets

Le problème du tas de boulets

On dit que pendant la guerre de 1870, Édouard Lucas a fait le constat qu'il est difficile de mettre en tas pyramidal, un nombre carré de boulets. Ce dessin de David Eppstein illustre le problème:

Ce tas de boulets comprend 16+9+4+1=30 boulets et effectivement 30 n'est pas un carré.

Ce problème est intéressant du point de vue algorithmique: Comment

  • Calculer la somme des carrés de entiers consécutifs ?
  • Boucler jusqu'à ce que cette somme soit un carré ?
C'est ce qu'on va explorer avec CoffeeScript dans cet article.

Comment tester si un nombre est un carré ?

L'algorithme utilisé consiste à regarder s'il y a des chiffres après la virgule dans le développement décimal de √(n) :

  1. √(1) = 1 : pas de chiffre après la virgule, 1 est un carré ;
  2. √(2) ∼ 1,414: après la virgule il y a les chiffres 414 etc, donc 2 n'est pas un carré ;
  3. √(3) ∼ 1,732: Là encore il y a des chiffres après la virgule et 3 n'est pas un carré ;
  4. √(4) = 2 : Pas de chiffres après la virgule, et 4 est un carré.
Autrement dit, un nombre est un carré si et seulement si sa racine carrée est un entier. On a donc pour commencer, besoin d'un algorithme pour tester si un nombre est entier :

Comment tester si un nombre est entier ?

CoffeeScript étant basé sur JavaScript, n'a pas de fonction donnant les éventuels chiffres après la virgule. Donc pour les connaître, on soustrait à x sa partie entière avec x - Math.floor x. Oui mais... L'image de 2,999999999999 par cette fonction est 0,9999999999989999 qui a bien des chiffres après la virgule, alors que 2,999999999999 est entier "aux erreurs de calcul près". Donc,

  • Au lieu de tronquer avec Math.floor, il vaut mieux arrondir avec Math.round au cas où x est, de peu, inférieur à un entier;
  • Au lieu de dire que x est entier s'il est égal à son arrondi (différence nulle), on dira que x est entier si la différence entre x et l'entier le plus proche est inférieure à 10-15 :

Maintenant que CoffeeScript est enrichi d'une nouvelle fonction isInteger, on va s'en servir pour définir une nouvelle fonction isSquare :

Un entier est un carré si et seulement si sa racine est entière

Comment additionner des carrés ?

Ce qui précède (création d'algorithmes pour faciliter la suite) ne sert pas à calculer la somme des carrés, mais on s'en servira après. Par contre, l'algorithme pour la somme des carrés est classique:

  • On a besoin de deux variables, sum pour la somme et index pour l'indice dans la boucle.
  • Ces deux variables sont initialisées à 0.
  • Lors de chaque passage dans la boucle,
    • index est incrémenté avec index++
    • Son carré est additionné à la somme courante sum
  • Si on boucle 4 fois, on a donc la somme des 4 premiers carrés

Le fait de boucler avec for plutôt que while permet de raccourcir le code; on peut raccourcir encore plus en inversant les proposition principale et subordonnée :

Il ne reste maintenant plus qu'à assembler les résultats des deux premières parties pour pouvoir chercher l'éventuelle possibilité que la somme des carrés des entiers successifs finisse par être elle-même un carré.

tu ne t'arrêteras que lorsque tu auras fini !

L'algorithme est simple :

On additionne les carrés jusqu'à ce que la somme soit carrée

On boucle à partir de n = 2 parce que des tas de 0 ou 1 boulet ne sont pas considérés comme des tas...

Pour aller plus vite

Si on détaille les boucles, on constate qu'on calcule plusieurs fois le carré de 2 :

Ceci parce qu'il y a des boucles imbriquées et que la somme des carrés jusqu'à n+1 est juste (n+1)2 de plus que la somme des carrés allant jusqu'à n: Autrement dit, la suite un des carrés des nombres inférieurs ou égaux à n, vérifie la relation de récurrence suivante :

un+1=un+(n+1)2

Ceci permet de simplifier l'algorithme, en calculant moins souvent les carrés, et en cherchant plus vite :

On peut améliorer l'affichage final :

Ceci répond à la question de l'existence d'un nombre n (autre que 0 et 1) tel que la somme des carrés des n premiers entiers est elle-même un carré. Mais y en a-t-il d'autres ?

Calcul formel

Pour retrouver algébriquement ces résultats, on peut faire appel à du calcul formel, en effet il existe une forme explicite pour la somme des carrés. Ici on va utiliser Xcas, mais d'autres logiciels de calcul formel font tout autant l'affaire. Tout d'abord, on peut retrouver la somme des 4 premiers carrés avec sum(k^2,k,0,4) qui répond bien 30. Ensuite il suffit de remplacer 4 par n en faisant sum(k^2,k,0,n) pour avoir (2*(n+1)3-3*(n+1)2+n+1)/6. Mieux, avec simplify(sum(k^2,k,0,n)), on apprend que la somme des n premiers carrés est (2*n3+3*n2+n)/6 (formule à montrer par récurrence évidemment). On a donc déjà un moyen de calculer la somme des carrés sans boucler. Par ailleurs, en demandant à Xcas factor((2*n^3+3*n^2+n)/6) on a une forme encore plus simple pour la somme des carrés: n(n+1)(2n+1)/6. Il s'agit donc de résoudre l'équation diophantienne 2x3+3x2+x=6y2. Xcas n'y arrive pas, mais Wolfram Alpha y parvient, en lui soumettant le calcul 2*x^3+3*x^2+x=6*y^2.

Wolfram Alpha dessine la courbe elliptique (puisque l'équation qu'on lui a fournie est celle d'une courbe elliptique):

Parmi les résultats affichés, on voit

Integer solutions:
  • x=1, y=±1
  • x=24, y=±70
Ce qui répond à la question. La démonstration élémentaire est laissée en exercice...


Commentaires

Navigation

Articles de la rubrique

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mercredi 21 juin 2017, 14h-18h, 146 route de Grand-Coude, Saint-Joseph


Brèves

Décès de Roger Mohr

mardi 27 juin

On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

lundi 24 juillet 2017

Publication

759 Articles
Aucun album photo
133 Brèves
11 Sites Web
132 Auteurs

Visites

321 aujourd'hui
292 hier
2063411 depuis le début
8 visiteurs actuellement connectés