Les mathématiques sont la seule science où on ne sait pas de quoi on parle ni si ce qu'on dit est vrai. Bertrand Russell (Mathématicien, philosophe, et … doué d'humour !)
Exercice 1
Soient a, b, c trois entiers non nuls. Valider (en écrivant une preuve) ou infirmer (par un contre-exemple) les affirmations suivantes :
Si a∣b et b∣c, alors a∣c.
Si a∣b et a∣c, alors a divise tous les entiers de la forme pb+qc avec p, q entiers.
Si c divise 2a alors c divise a.
Si c divise a, ou si c divise b, alors c divise ab.
Si c divise ab, alors c divise a ou c divise b.
Si c divise 3a+1 et 5a−1, alors c divise 8.
Correction
Si a∣b et b∣c, alors b=ka et c=lb, avec k et l entiers.
D'où c=lka, avec lk entier, ce qui donne a∣c. VRAIE.
Si a∣b et a∣c, alors b=ka et c=la, avec k et l entiers.
D'où, pour p et q entiers, pb+qc=pka+qla=(pk+ql)a, avec pk+ql entier,
ce qui donne a∣pb+qc. VRAIE.(Rappel : propriété utile pour prouver l'algorithme d'Euclide)
Avec c=2 et a=1, on a c∣2a, mais c∤a. FAUSSE. (Autre exemple) Avec c=22 et a=33, on a c∣2a, mais c∤a.
On raisonne par disjonction des cas:
Si c∣a, alors a=kc avec k entier,
ainsi ab=kcb=(kb)c avec kb entier, et donc c∣ab.
L'autre cas est similaire, a et b jouant des rôles symétriques. VRAIE.
Il s'agit d'étudier la réciproque.
Soit p un nombre premier, on pose c=p2, et a=b=p, on a c∣ab, mais c∤a et c∤b. FAUSSE.
Autre contre-exemple : avec c=2×3,a=2,b=3, on a c∣ab, mais c∤a et c∤b. FAUSSE.
Si c divise 3a+1 et 5a−1, on utilise la propriété utile 2. c divise 5(3a+1)+(−3)(5a−1), d'où c∣(15a+5−15a+3), et enfin c divise 8. VRAIE.
Exercice 2
Quel est le dernier chiffre de 71337 ?
Conseil 1 : Voir d'abord pour : 70;71;72;73;…
Conseil 2 : deviner une règle, et la justifier.
Quel est le dernier chiffre de 7(133742) ?
Une réponse
Voyons d'abord ce que Python peut répondre directement.
# 1.
a =7
e =1337print(f"Le dernier chiffre de {a} exposant {e} est :", a**e %10)# Noter l'utilisation de : f"texte et {variable} mélangés"print(f"Le dernier chiffre de {a} exposant {e} est :",pow(a, e,10))# Méthode plus rapide et efficace ; Python utilise ici du calcul modulaire... à suivre#----# 2.
a =7
e =1337**42#print(a**e % 10) # <--- danger, ne pas essayer !!!# Le calcul de a**e ne rentre pas en mémoire !!!# Même pas pour un ordinateur de la taille de l'univers.print("Question 2 ->",pow(a, e,10))# Cette méthode fonctionne.
Le dernier chiffre de 7 exposant 1337 est : 7
Le dernier chiffre de 7 exposant 1337 est : 7
Question 2 -> 7
Étude mathématique.
70=1, se termine par un 1.
71=7, se termine par un 7.
72=49, se termine par un 9.
73=…3, se termine par un 3, tout comme 9×7=63.
74=…1, se termine par un 1, tout comme 3×7=21.
75=…7, se termine par un 7, tout comme 1×7=7.
76=…9, se termine par un 9, tout comme 7×7=49.
77=…3, se termine par un 3, tout comme 9×7=63.
78=…1, se termine par un 1, tout comme 3×7=21.
…
La suite est cyclique, d'ordre 4.
Les exposants e conduisant à 7e se finissant par 1, sont : {0,4,8,12,16,20,24,…}. Ce sont les entiers dont le reste dans une division modulo 4 est égale à 0. On dit que ce sont les entiers congrus à 0 modulo 4, ils sont dans la même classe.
Les exposants e conduisant à 7e se finissant par 7, sont : {1,5,9,13,17,21,25,…}. Ce sont les entiers dont le reste dans une division modulo 4 est égale à 1. On dit que ce sont les entiers congrus à 1 modulo 4, ils sont dans la même classe.
Les exposants e conduisant à 7e se finissant par 9, sont : {2,6,10,14,18,22,26,…}. Ce sont les entiers dont le reste dans une division modulo 4 est égale à 2. On dit que ce sont les entiers congrus à 2 modulo 4, ils sont dans la même classe.
Les exposants e conduisant à 7e se finissant par 3, sont : {3,7,11,15,19,23,27,…}. Ce sont les entiers dont le reste dans une division modulo 4 est égale à 3. On dit que ce sont les entiers congrus à 3 modulo 4, ils sont dans la même classe.
Notre question 1. se résume donc à : « Quelle est la classe de 1337, modulo 4 ? » 1337÷4↦(q=334,r=1), on déduit que 1337 est dans la classe de 1, modulo 4. On écrit : 1337≡1(mod4).
1337 étant dans la classe de 1, modulo 4, on déduit que 71337 se termine par un 7.
Notre question 2. se résume aussi à : « Quelle est la classe de 133742, modulo 4 ? »
Nous verrons que 1337≡1(mod4) implique que 133742≡142≡1(mod4).
133742 étant dans la classe de 1, modulo 4, on déduit que 7(133742) se termine par un 7.
Exercice 3
Un triplet Pythagoricien est un triplet d'entiers (a,b,c), avec 0<a,b<c et a2+b2=c2. Ce sont alors les trois côtés entiers d'un triangle rectangle. (b,a,c) en est alors un aussi. On dit que le triplet est primitif si les entiers a et b sont premiers entre eux, c'est-à-dire que le PGCD(a,b)=1.
Exemple :(3,4,5) est très connu des maçons. Mais aussi (5,12,13) et (6,8,10) ; des deux derniers exemples, le premier est primitif, pas le second.
Avec un script Python, afficher tous les triplets pythagoriciens (a,b,c), avec 0<a<b<c<M.
Dans un premier temps, une méthode en Θ(M3) suffira pour M=100.
Modifier votre script pour avoir une version en Θ(M2) ; dans ce cas-là, l'utilisation de la racine carrée est conseillée ; on peut alors tester M=1000.
Modifier vos scripts pour n'avoir que les triplets primitifs.
Démontrer que si a et b sont premiers entre eux, alors a et c le sont aussi. En déduire que un triplet est primitif si et seulement si deux côtés quelconques sont premiers entre eux.
Correction
Voici des scripts donnant des triplets pythagoriciens :
Faisons une triple boucle : pour tout a, pour tout b, pour tout c (ou dans l'autre ordre).
Tirons parti de 0<a<b<c<M.
M =100for a inrange(1, M):for b inrange(a+1, M):for c inrange(b+1, M):if a*a + b*b == c*c:print(a, b, c)
Le calcul de a×a se fait de nombreuses fois, pour la même valeur de a, de même que b.
Quand 2a2>M2, il n'y a plus de solutions, en effet, avec aussi a<b, on a c2=a2+b2>a2+a2>M2.
Version légèrement améliorée :
from math import sqrt, floor
M =100
aMax = floor(M/sqrt(2))# floor(x) renvoie un entier, le plus grand inférieur ou égal à x.for a inrange(1, aMax +1):
a2 = a*a
for b inrange(a+1, M):
b2 = b*b
for c inrange(b+1, M):if a2 + b2 == c*c:print(a, b, c)
Mais surtout, la triple boucle donne une complexité en Θ(M3). Θ(M3) signifie (un peu comme O(M3)) que le script fait un nombre d'opérations proportionnel à M3, mais pas seulement dans le pire des cas ; toujours !
Pour passer en Θ(M2), on remplace la dernière boucle par un calcul du seul candidat possible pour c avec le théorème de Pythagore.
for a inrange(1, M):for b inrange(1, M):
c =round(sqrt(a*a + b*b))if(c < M) ans (a*a + b*b == c*c):print(a, b, c)
Exercice 4
Écrire 511104 sous la forme ab, avec a et b entiers, et b le plus petit possible.
Une réponse
On factorise 511104, ici avec un appel de commande externe via bash dans la console Python de Jupyter. Qui a dit tricheur ?
La version factor incluse dans bash est très efficace ; bien plus que les méthodes qui vous sont accessibles. Pensez-y si votre méthode est trop lente.
$ factor 511104
511104: 2 2 2 2 2 2 2 3 11 11 11
On a : 511104=27×3×113=(26×112)×(2×3×11), et donc :