Calendrier Mathématique Janvier 2021

Solutions personnelles aux problèmes du Calendrier Mathématique


Calendrier Mathématique Janvier 2021

Solutions 2021 - Homepage

Vendredi 1 Janvier

Cf. programme Python.

#!/usr/bin/env python3

from sympy.ntheory.primetest import isprime


def rev(n):
    """ Retourne le nombre n écrit à l'envers dans sa représentaiton décimale. """
    u = 0
    while n != 0:
        n, r = divmod(n, 10)
        u = u * 10 + r
    return u


pp = set()
for n in range(11, 101):
    if isprime(n) and isprime(rev(n)):
        pp.add(n)
print("premiers réversibles:", sorted(pp))
print("réponse:", len(pp))

On trouve 9 nombres en tout: [11, 13, 17, 31, 37, 71, 73, 79, 97]

réponse: 9

Lundi 4 Janvier

Mise en équation

  • martina = 2 × roger
  • martina = raphaël + 5
  • martina + roger + raphaël = 70

Calcul de la solution avec un notebook WolframAlpha.

Ou, à la main:

martina + (martina / 2) + (martina - 5) = 70

D’où: martina = 30, roger = 15, raphaël = 25

réponse: 30

Mardi 5 Janvier

Cf. programme Python.

#!/usr/bin/env python3

import itertools

expr = "100 {} 45 {} 67 {} 62 == 50"

for signs in itertools.product("+-", repeat=3):
    e = expr.format(*signs)
    v = eval(e)
    if v == True:
        n = signs.count("-")
        p = signs.count("+")
        print(f"{e} p={p} n={n} p-n={p-n}")

réponse: p-n = -1

Mercredi 6 Janvier

Soit H1, B1 = nombre de points des surfaces haute et basse du premier dé

Soit H2, B2 = nombre de points des surfaces haute et basse du deuxième dé

    +-----+ ← H1
    |     |
    |     |
    +-----+ ← B1

    +-----+ ← H2
    |     |
    |     |
    +-----+ ← B2

On a:

  • H1 (3 à 6)
  • B1 = 7 - H1
  • H2 = 5 - (7 - H1) = H1 - 2
  • B2 = 7 - H2 = 7 - H1 + 2 = 9 - H1

D’où: H1 + B2 = 9

réponse: 9

Nota: tous les empilements ne sont pas possibles: B1 ne peut pas valoir 5 ou 6, donc H1 ne peut pas valoir 1 ou 2.

Jeudi 7 Janvier

Le grand-père peut donner un des cinq fruits ou rien, puisqu’il manque un fruit.

  • premier enfant: un des cinq fruits ou rien = 6 possibilités
  • deuxième enfant: une possibilité en moins, soit 5
  • etc.

Nombre de permutations: 6! = 6×5×4×3×2×1 = 720

réponse: 720

Vendredi 8 Janvier

Cf. programme Python.

#!/usr/bin/env python3

# triangle de côté 15 cm, 20 cm, 25 cm. calculez les hauteurs
# Nota: le triangle est rectangle, deux hauteurs ont pour longueur 15 et 20 cm

from math import sqrt


def hauteur(a, b, c):
    """ Calcule la hauteur d'un triangle à partir des longueurs de ses côtés. """
    # http://villemin.gerard.free.fr/GeomLAV/Triangle/Calcul/RelQuelh.htm
    h = sqrt(c ** 2 - ((a ** 2 - b ** 2 + c ** 2) / (2 * a)) ** 2)
    return h


print(hauteur(15, 20, 25))
print(hauteur(20, 25, 15))
print(hauteur(25, 15, 20))  # <== donne la troisième hauteur

réponse: 12 cm

Lundi 11 Janvier

Pour maximiser, on considère des diviseurs premiers tous différents.

Le nombre de diviseurs de ∏ p est 2^n.

Pour avoir 2^n=32, il faut n=5. Donc 2×3×5×7×11=2310 a exactement 32 diviseurs, avec 5 diviseurs premiers.

réponse: 5

Mardi 12 Janvier

3^x - 3^(x-1) = 162
⇒ 3 × 3^(x-1) - 3^(x-1) = 162
⇒ (3 - 1) × 3^(x-1) = 162
⇒ 2 × 3^(x-1) = 162
⇒ 3^(x-1) = 81
⇒ x = 5

réponse: 5

Mercredi 13 Janvier

Propositions:

personne proposition
Alfred Bernard est le plus jeune
Louis Louis est le plus jeune
Hector Bernard le plus vieux, Hector le plus jeune
Bernard Bernard ni le plus jeune ni le plus vieux

Alfred, Louis, Hector ont chacun un plus jeune différent. Il y a en donc deux parmi ces trois qui mentent. Donc Bernard dit la vérité. Alfred et Hector mentent puisqu’ils contredisent Bernard. Et donc Louis dit la vérité.

De manière exhaustive:

Alfred Louis Hector Bernard ok raison
mensonge mensonge vérité vérité non Hector et Bernard se contredisent
mensonge vérité mensonge vérité oui  
mensonge vérité verité mensonge non Louis et Hector se contredisent
vérité vérité mensonge mensonge non Alfred et Louis se contredisent
vérité mensonge vérité mensonge non Alfred et Hector se contredisent
vérité mensonge mensonge vérité non Alfred et Bernard se contredisent

réponse: Louis et Bernard

Jeud 14 Janvier

Cf. programme en Python.

#!/usr/bin/env python3

for a in range(1, 20):
    for b in range(1, 20):
        # condition 1: le triangle doit exister
        if b < 2 * a:
            # condition 2: périmètre = 20
            if 2 * a + b == 20:
                print(f"triangle {a} {a} {b}")

réponse: (6,6,8) (7,7,6) (8,8,4) (9,9,2)

Vendredi 15 Janvier

Cf. programme en Python.

#!/usr/bin/env python3

# max(1/(1+i) + 1/(2021-i))

from fractions import Fraction

print(
    max(
        (Fraction(1, 1 + i) + Fraction(1, 2021 - i), f"1/{1+i} + 1/{2021-i}")
        for i in range(0, 1011)
    )[1]
)

réponse: 1/1 + 1/2021

Lundi 18 Janvier

  • nombre avec 11 diviseurs: p^10 (p premier)
  • nombre avec 15 diviseurs: p^2 × q^4 (p et q premiers distincts)
  • nombre avec 15 diviseurs: p^14 (q premier)

Selon les cas, m × n a 25, 45, 65 ou 165 diviseurs.

réponse: 25

Mardi 19 Janvier

La figure est composée de:

  • 4 triangles équilatéraux de 1 cm de côté:
    • hauteur = √3/2
    • base = 1
    • S = (√3/2 × 1 / 2) × 4 = √3 cm²
  • 1 carré central de 1 cm de côté:
    • S = 1 cm²

réponse: 1+√3 cm²

Mercredi 20 Janvier

soit M la masse totale des haricots
soit m la masse sèche des haricots
soit e la masse d'eau des haricots

initial:    e = 0.9 M           90% d'eau dans les haricots
            m = 0.1 M           et donc 10% qui n'est pas de l'eau

après:      e' = e1 - 15        deshydratation de 15 l
            e' = 0.6 (M-15)     60% d'eau dans les haricots
            m = 0.4 (M - 15)    et donc 40% qui n'est pas de l'eau

on a :
    0.9 × M - 15 = 0.6 (M - 15)

ou bien:
    0.1 M = 0.4 (M - 15)

on trouve M = 20

réponse: 20 kg

Jeudi 21 Janvier

Cf. programme en Python.

#!/usr/bin/env python3

# les palindromes à 3 chiffres sont forcément du genre 'aba' avec a ∈ [1,9] et b quelconque.
# il y a donc 9 * 10 palindromes entre 100 et 1000


def rev(n):
    """ Retourne le nombre n écrit à l'envers dans sa représentaiton décimale. """
    u = 0
    while n != 0:
        n, r = divmod(n, 10)
        u = u * 10 + r
    return u


palindromes = [n for n in range(100, 1001) if rev(n) == n]

print("palindromes:", palindromes)
print("réponse:", len(palindromes))

réponse: 90

Vendredi 22 Janvier

Cf. programme en Python.

#!/usr/bin/env python3

# il y a 36 jets possibles, soit 36 nombres:
#   11 12 13 14 15 16 21 22 ... 65 66
# parmi ces nombres il y a 4 carrés: 16 25 36 64
# soit 4/36 ou 1/9
# en inversant les chiffres (6 3 sont les chiffres de 36), on doit multiplier par 2, soit 2/9

from fractions import Fraction

# les carrés de 4 à 64
squares = [n * n for n in range(2, 9)]

n = p = 0
for i in range(1, 7):
    for j in range(1, 7):
        n += 1
        if i * 10 + j in squares or i + 10 * j in squares:
            print("chiffres d'un carré:", i, j)
            p += 1

print("réponse:", Fraction(p, n))

réponse: 2/9

Lundi 25 Janvier

Quand p^q+1 est-il premier avec p,q premiers ?

Si p impair p^q = impair, donc p^q+1 pair et donc pas premier.

Donc p est forcément pair, et donc vaut 2 (seul premier pair).

Regardons ce qu’il se passe:

  • q=2 : 2^q+1=5 ✅
  • q=3 : 2^3+1=9 = 3×3 ❌
  • q=5 : 2^5+1=3 = 3×11 ❌
  • q=7 : 2^7+1=129 = 3×43 ❌
  • q=11 : 2^11+1=2049 = 3×683 ❌

Apparemment p^q+1 est toujours divisible par 3 si q premier, et même impair.

Démonstration

Supposons qu’il existe X tel que 2^(2k+1) + 1 = 3×X

C’est vrai pour k = 1 (X = 3)

2^(2k+2+1) + 1 = 2^(2k+1) × 2^2 + 1 = 4 × 2^(2k+1) + 4 - 3 = 4 × (2^(2k+1) + 1) - 3 = 4 × (3 × X) - 3 = 3 × (4 × X - 1)

On montre donc qu’il existe X’ tel que 2^(2(k+1)+1) + 1 = 3×X’

Par récurrence, on conclut que 2^q+1 est multiple de 3 si q est impair.

réponse: 1 seul couple (2, 2)

Mardi 26 Janvier

hexagone de 2 cm de côté

rayon du cercle circonscrit = 2 cm, surface = πr² = 4π

rayon du cercle inscrit = hauteur du triangle
équilatéral de côté 2 cm,
h = √3/2 × r = √3,
surface = √3² π = 3π

surface anneau = 4π - 3π = π

réponse: π cm²

Mercredi 27 Janvier

Cf. programme en Python.

#!/usr/bin/env python3

from datetime import datetime, timedelta

un_jour = timedelta(days=1)

visite = datetime(2020, 12, 31)

# vérifie que c'est bien un jeudi
assert visite.weekday() == 3  # 0=lundi 1=mardi 2=mercredi 3=jeudi etc.

# vérifie que les 6 visites suivantes n'ont pas lieu un jeudi
for i in range(1, 7, 13):
    assert (visite + timedelta(days=i)).weekday() != 3

# vérifie que la 7ème visite a lieu un jeudi
assert (visite + timedelta(days=7 * 13)).weekday() == 3

print("réponse:", 7 * 13)

réponse: 91

Jeudi 28 Janvier

    /|\
 a / | \ a
  /  |h \
 /   |   \
 ---------
     b

On a:

  • 2a + b = 32
  • (b/2)² + 8² = a²

On résout ce système:

  • b = 32 - 2a
  • ((32-2a)/2)² + 64 = a² ⇒ 16² - 32a + a² + 64 = a² ⇒ 320 = 32a

D’où:

  • a = 10
  • b = 32 - 2×10 = 12

L’aire du triangle est h × b/2 = 8 × 6 = 48

réponse: 48 cm²

Vendredi 29 Janvier

La moyenne des xᵢ est:

∑xᵢ / n = 4850

Calculons la moyenne des xᵢ - 10:

∑(xᵢ - 10) / n = (∑xᵢ - 10 × n) / n = (∑xᵢ / n) - (10 × n / n) = 4850 - 10 = 4840

réponse: 4840