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 aa, bb, cc trois entiers non nuls. Valider (en écrivant une preuve) ou infirmer (par un contre-exemple) les affirmations suivantes :

  1. Si aba \mid b et bcb \mid c, alors aca \mid c.
  2. Si aba \mid b et aca \mid c, alors aa divise tous les entiers de la forme pb+qcpb + qc avec pp, qq entiers.
  3. Si cc divise 2a2a alors cc divise aa.
  4. Si cc divise aa, ou si cc divise bb, alors cc divise abab.
  5. Si cc divise abab, alors cc divise aa ou cc divise bb.
  6. Si cc divise 3a+13a + 1 et 5a15a − 1, alors cc divise 88.

Correction

  1. Si aba \mid b et bcb \mid c, alors b=kab=ka et c=lbc=lb, avec kk et ll entiers.
    D'où c=lkac = lka, avec lklk entier, ce qui donne aca\mid c. VRAIE.

  2. Si aba\mid b et aca \mid c, alors b=kab=ka et c=lac=la, avec kk et ll entiers.
    D'où, pour pp et qq entiers, pb+qc=pka+qla=(pk+ql)apb+qc = pka+qla = (pk+ql)a, avec pk+qlpk+ql entier,
    ce qui donne apb+qca\mid pb+qc. VRAIE. (Rappel : propriété utile pour prouver l'algorithme d'Euclide)

  3. Avec c=2c=2 et a=1a=1, on a c2ac\mid 2a, mais cac\nmid a. FAUSSE.
    (Autre exemple) Avec c=22c=22 et a=33a=33, on a c2ac\mid 2a, mais cac\nmid a.

  4. On raisonne par disjonction des cas:

    • Si cac\mid a, alors a=kca=kc avec kk entier,
      ainsi ab=kcb=(kb)cab=kcb = (kb)c avec kbkb entier, et donc cabc\mid ab.
    • L'autre cas est similaire, aa et bb jouant des rôles symétriques.
      VRAIE.
  5. Il s'agit d'étudier la réciproque.

  1. Si cc divise 3a+13a + 1 et 5a15a − 1, on utilise la propriété utile 2.
    cc divise 5(3a+1)+(3)(5a1)5(3a + 1)+(-3)(5a − 1), d'où c(15a+515a+3)c\mid (15a +5 -15a +3), et enfin
    cc divise 88. VRAIE.

Exercice 2

  1. Quel est le dernier chiffre de 713377^{1337} ?
    • Conseil 1 : Voir d'abord pour : 70;71;72;73;7^{0} ; 7^{1} ; 7^{2} ; 7^{3} ; \dots
    • Conseil 2 : deviner une règle, et la justifier.
  2. Quel est le dernier chiffre de 7(133742)7^{(1337^{42})} ?

Une réponse

Voyons d'abord ce que Python peut répondre directement.

# 1.
a = 7
e = 1337

print(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.

La suite est cyclique, d'ordre 44.

Notre question 1. se résume donc à : « Quelle est la classe de 13371337, modulo 44 ? »
1337÷4(q=334,r=1)1337 \div 4 \mapsto (q=334, r=1), on déduit que 13371337 est dans la classe de 11, modulo 44. On écrit : 13371(mod4)1337 \equiv 1 \pmod 4.

13371337 étant dans la classe de 11, modulo 44, on déduit que 713377^{1337} se termine par un 77.


Notre question 2. se résume aussi à : « Quelle est la classe de 1337421337^{42}, modulo 44 ? »

Nous verrons que 13371(mod4)1337 \equiv 1 \pmod 4 implique que 1337421421(mod4)1337^{42} \equiv 1^{42} \equiv 1 \pmod 4.

1337421337^{42} étant dans la classe de 11, modulo 44, on déduit que 7(133742)7^{(1337^{42})} se termine par un 77.


Exercice 3

Un triplet Pythagoricien est un triplet d'entiers (a,b,c)(a, b, c), avec 0<a,b<c0 < a , b < c et a2+b2=c2a^2 + b^2 = c^2. Ce sont alors les trois côtés entiers d'un triangle rectangle. (b,a,c)(b,a,c) en est alors un aussi. On dit que le triplet est primitif si les entiers aa et bb sont premiers entre eux, c'est-à-dire que le PGCD(a,b)=1\text{PGCD}(a, b)=1.

Exemple : (3,4,5)(3, 4, 5) est très connu des maçons. Mais aussi (5,12,13)(5, 12, 13) et (6,8,10)(6, 8, 10) ; des deux derniers exemples, le premier est primitif, pas le second.

  1. Avec un script Python, afficher tous les triplets pythagoriciens (a,b,c)(a,b,c), avec 0<a<b<c<M0 < a < b < c < M.

    1. Dans un premier temps, une méthode en Θ(M3)\Theta(M^3) suffira pour M=100M = 100.
    2. Modifier votre script pour avoir une version en Θ(M2)\Theta(M^2) ; dans ce cas-là, l'utilisation de la racine carrée est conseillée ; on peut alors tester M=1000M = 1000.
  2. Modifier vos scripts pour n'avoir que les triplets primitifs.

  3. Démontrer que si aa et bb sont premiers entre eux, alors aa et cc 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

  1. Voici des scripts donnant des triplets pythagoriciens :
    1. Faisons une triple boucle : pour tout aa, pour tout bb, pour tout cc (ou dans l'autre ordre).
      Tirons parti de 0<a<b<c<M0 < a < b < c < M.
M = 100
for a in range(1, M):
    for b in range(a+1, M):
        for c in range(b+1, M):
            if a*a + b*b == c*c:
                print(a, b, c)
3 4 5
5 12 13
6 8 10
7 24 25
8 15 17
9 12 15
9 40 41
10 24 26
11 60 61
12 16 20
12 35 37
13 84 85
14 48 50
15 20 25
15 36 39
16 30 34
16 63 65
18 24 30
18 80 82
20 21 29
20 48 52
21 28 35
21 72 75
24 32 40
24 45 51
24 70 74
25 60 65
27 36 45
28 45 53
30 40 50
30 72 78
32 60 68
33 44 55
33 56 65
35 84 91
36 48 60
36 77 85
39 52 65
39 80 89
40 42 58
40 75 85
42 56 70
45 60 75
48 55 73
48 64 80
51 68 85
54 72 90
57 76 95
60 63 87
65 72 97

Critique du script :

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 in range(1, aMax + 1):
    a2 = a*a
    for b in range(a+1, M):
        b2 = b*b
        for c in range(b+1, M):
            if a2 + b2 == c*c:
                print(a, b, c)

Mais surtout, la triple boucle donne une complexité en Θ(M3)\Theta(M^3).
Θ(M3)\Theta(M^3) signifie (un peu comme O(M3)\mathcal{O}(M^3)) que le script fait un nombre d'opérations proportionnel à M3M^3, mais pas seulement dans le pire des cas ; toujours !

Pour passer en Θ(M2)\Theta(M^2), on remplace la dernière boucle par un calcul du seul candidat possible pour cc avec le théorème de Pythagore.

for a in range(1, M):
    for b in range(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 511  104\sqrt{511\;104} sous la forme aba\sqrt{b}, avec aa et bb entiers, et bb le plus petit possible.


Une réponse

On factorise 511  104511\;104, 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 : 511  104=27×3×113=(26×112)×(2×3×11)511\;104 = 2^7\times3\times11^3 = (2^6\times11^2)\times(2\times3\times11), et donc :

511  104=(23×11)×2×3×11=8866\sqrt{511\;104} = (2^3\times11)\times\sqrt{2\times3\times11} = 88\sqrt{66}