7 6 882 309 est-il divisible par 7 ? par 21 ? Fiche Professeur TS Spé Math Auteurs : Pierre Lapôtre & Raymond Moché Objet de l’activité : Arithmétique et algorithmique En fait, on se pose la question pour un entier n ⩾ 1 quelconque. Cela donne un exercice d’arithmétique apparemment peu connu autour de la divisibilité par 7 (mais aussi par 3 et par 21) avec mise en œuvre algorithmique. Commentaires : • Cette activité est plutôt facile. L’application TICE pourrait être proposée en Première. • Pour savoir si un nombre est divisible par sept, on peut, bien sûr, poser la division ou la faire à la machine (calculatrice, ordinateur). • La méthode proposée dans la fiche Élève ne nécessite que du calcul mental lorsque n est petit. La justifier est plutôt intéressant. La programmer permet d’accéder à de plus grandes valeurs de n. Elle est sans réel intérêt pratique. • L’énoncé a été rédigé pour scilab mais l’exercice n’est pas scilab-dépendant. Il suffit de remplacer dans l’énoncé l’expression « fonction-scilab » par le terme qui convient au logiciel de calcul utilisé. Pré-requis : En arithmétique, division euclidienne, nombres premiers et lemme d’Euclide (si un nombre premier p divise un produit a· b de deux entiers, il divise soit a, soit b) ou unicité de la décomposition d’un nombre entier en produit de nombres premiers ; en algorithmique, connaissances de base de scilab (éditeur de texte scinotes, syntaxe d’une fonction-scilab, boucle tant que, commandes d’affichage). Matériel utilisé : Ordinateur équipé de scilab pour les lycées. Durée indicative : Une heure (la quatrième question peut être omise). Fichiers téléchargeables : • Pour les élèves : Fiche Élève (.pdf). • Pour les professeurs : Fiche Professeur (.pdf) & fichiers DivSept (.sci), DivVingtUn (.sci). Solution : 1.a - m = q −2u. Par exemple, si n = 1, m = −2 ; si n = 315, m = 21. Ceci ne doit pas être considéré comme évident. En effet, on vient de modéliser une démarche concrète (celle qui commence par « On efface le chiffre des unités, etc »). 1.b - On déduit de n = 10· m + 21· u que si m est un multiple de 7, n est un multiple de 7. Inversement, si n est un multiple de 7, 10· m est un multiple de 7. Comme 7 est un nombre premier qui ne divise pas 10, il divise m, d’après le lemme d’Euclide. Ce raisonnement reste correct si on remplace 7 par 3 ou par 21. n−u n 1.c - Comme u ⩾ 0, m ⩽ q = ⩽ · 10 10 n n0 À la deuxième itération, s’il y en a une, on a m ⩽ ⩽ 2 et ainsi de suite. Donc m deviendra 10 10 < 1, donc ⩽ 0, à un certain moment. 1.d - Toutes les valeurs de m obtenues au cours des itérations sont ⩾ −18 car comme q ⩾ 0 et u ⩽ 9 (division euclidienne), m = q − 2· u ⩾ −2· u ⩾ −18. 1.e - À chaque itération, n et m sont tous les deux soit divisibles par 7, soit non divisibles par 7 (cf.1.b). n0 et m1 ont donc la même propriété. Cela reste vrai si l’on remplace 7 par 3 ou par 21. 2 - Voici un algorithme commenté qui met en œuvre cette méthode : 1 Listing 1 – Fonction DivSept.sci function DivSept ( n ) //n e s t un e n t i e r donne >=1. m1=n ; //m1 c o n t i e n d r a l e s v a l e u r s s u c c e s s i v e s de n dont l a v a l e u r i n i t i a l e // e s t g a r d e e dans n (n_0 de l ’ enonce ) . Sa v a l e u r f i n a l e e s t l e m_1 // de l ’ enonce . while m1>=1 q=q u o t i e n t (m1, 1 0 ) u=r e s t e (m1 , 1 0 ) ; m1=q−2∗u ; end i f (m1==0|m1==−7|m1==−14) a f f i c h e r ( " Le␣nombre␣ "+string ( n)+ " ␣ e s t ␣ d i v i s i b l e ␣ par ␣7 " ) ; else a f f i c h e r ( " Le␣nombre␣ "+string ( n)+ " ␣n ’ ’ e s t ␣ pas ␣ d i v i s i b l e ␣ par ␣7 " ) ; end endfunction 3.a - Voici quelques exemples d’applications : Listing 2 – Exemples −−>cl e a r −−>exec ( ’ Chemin␣ deDivSept . s c i ’ , −1) −−>DivSept ( 6 8 8 2 3 0 9 ) Le nombre 6882309 e s t d i v i s i b l e par 7 −−>DivSept ( 6 8 8 2 3 0 9 0 0 0 ) Le nombre 6882309000 e s t d i v i s i b l e par 7 −−>DivSept ( 1 0 ^ ( 3 0 ) ) Le nombre 1 . 0 0 0 0 0 0 0 0 0D+30 n ’ e s t pas d i v i s i b l e par 7 −−> 3.b - Au cours des 3 premières itérations lorsque n = 6 882 309 000, les valeurs successives de m sont 68 82 30 900, 688 23 090 et 6 882 309. On sait déjà que ce nombre est divisible par 7. 3.c - À chaque itération, n = 1030 perd un zéro. À la dernière itération, n = 1 et m1 = −2, donc 1030 n’est pas divisible par 7. 4 - La fonction-scilab ci-dessous affiche la divisibilité par 3, 7 et 21 : Listing 3 – Fonction DivVingtUn.sci function DivVingtUn ( n ) //n e s t un e n t i e r donne >=1. m1=n ; //m1 c o n t i e n d r a l e s v a l e u r s s u c c e s s i v e s de n dont l a v a l e u r i n i t i a l e // e s t g a r d e e dans n (n_0 de l ’ enonce ) . Sa v a l e u r f i n a l e e s t l e m_1 // de l ’ enonce . while m1>=1 q=q u o t i e n t (m1, 1 0 ) u=r e s t e (m1 , 1 0 ) ; m1=q−2∗u ; end i f (m1==0|m1==−7|m1==−14) a f f i c h e r ( " Le␣nombre␣ "+string ( n)+ " ␣ e s t ␣ d i v i s i b l e ␣ par ␣7 " ) ; 2 else a f f i c h e r ( " Le␣nombre␣ "+string ( n)+ " ␣n ’ ’ e s t ␣ pas ␣ d i v i s i b l e ␣ par ␣7 " ) ; end i f (m1==0|m1==−3|m1==−6|m1==−9|m1==−12|m1==−15|m1==−18) a f f i c h e r ( " I l ␣ e s t ␣ d i v i s i b l e ␣ par ␣3 " ) ; else a f f i c h e r ( " I l ␣n ’ ’ e s t ␣ pas ␣ d i v i s i b l e ␣ par ␣3 " ) ; end i f (m1==0) a f f i c h e r ( " I l ␣ e s t ␣ d i v i s i b l e ␣ par ␣ 21 " ) ; else a f f i c h e r ( " I l ␣n ’ ’ e s t ␣ pas ␣ d i v i s i b l e ␣ par ␣ 21 " ) ; end endfunction Voici quelques exemples : Listing 4 – Exemples −−>cl e a r −−>exec ( ’ Chemin␣ de ␣ DivVingtUn . s c i ’ , −1) −−>DivVingtUn ( 6 8 8 2 3 0 9 ) Le nombre 6882309 e s t d i v i s i b l e par 7 I l e s t d i v i s i b l e par 3 I l e s t d i v i s i b l e par 21 −−>DivVingtUn ( 6 8 8 2 3 1 2 ) Le nombre 6882312 n ’ e s t pas d i v i s i b l e par 7 I l e s t d i v i s i b l e par 3 I l n ’ e s t pas d i v i s i b l e par 21 −−>DivVingtUn ( 6 8 8 2 3 1 6 ) Le nombre 6882316 e s t d i v i s i b l e par 7 I l n ’ e s t pas d i v i s i b l e par 3 I l n ’ e s t pas d i v i s i b l e par 21 −−>DivVingtUn ( 6 8 8 2 3 0 9 0 0 0 ) Le nombre 6882309000 e s t d i v i s i b l e par 7 I l e s t d i v i s i b l e par 3 I l e s t d i v i s i b l e par 21 −−>DivVingtUn ( 1 0 ^ ( 3 0 ) ) Le nombre 1 . 0 0 0 0 0 0 0 0 0D+30 n ’ e s t pas d i v i s i b l e par 7 I l n ’ e s t pas d i v i s i b l e par 3 I l n ’ e s t pas d i v i s i b l e par 21 Pour aller moins loin ! Voici un procédé simple qui se fait de tête, qui produit le reste de la division par 7 et qui peut se programmer, expliqué à l’aide d’un exemple (quand on tient absolument à ne pas se servir de la commande reste de scilab pour les lycées) : 3 6882309 6112302 512302 22302 1302 602 42 0 (si on retire à un nombre un multiple de 7, on ne change pas son reste dans la division par 7). 4