Curiosités mathématiques/Trouver le jour de la semaine avec une date donnée

Un livre de Wikilivres.

Cette page donne plusieurs méthodes de calcul pour trouver le jour de la semaine correspondant à une date donnée dans le calendrier grégorien. Le calendrier grégorien adopté au XVIe siècle succède au calendrier Julien, en modifiant la règle pour déterminer quelle année est bissextile.

La date d'adoption du calendrier varie selon le pays. Ces méthodes de calcul sont valables pour les dates à partir du 1er novembre 1582.

Méthode 1

Il y a une méthode plus simple que celles décrites ci-dessous pour trouver le jour d'une date.

C'est d'après l'Algorithme de Mike Keith[1] (dont est inspirée la Méthode 2)

Dans un article publié en 1990 dans le Journal of Recreational Mathematics, Vol. 22, No. 4, 1990, p. 280, Mike Keith propose un algorithme pour la détermination du jour de la semaine correspondant à une date quelconque. Sa formule est inspirée de la congruence de Zeller.

Mike Keith déclare lui-même qu'il s'agit là de la « plus simple formule possible » pour le calcul du jour de la semaine, « la meilleure qui puisse être construite », ajoute-t-il.

Dans sa forme opérationnelle, son algorithme en C s'écrit :

(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7

Comme Mike Keith est un mathématicien américain, d = Day pour Jour (d = 1 à 31) ; m = Month pour Mois (m = 1 à 12; 1 = Janvier, 2 = Février, 3 = Mars, ... , 12 = Décembre) et y = Year pour Année.

L'algorithme traduit les formules mathématiques suivantes :

Si m < 3 :

Sinon :

wd (weekday) est le jour de la semaine : 0 = Dimanche, 1 = Lundi, ... , 6 = Samedi.

En détails

  • La partie multipliant le mois par 23 et le divisant par 9 permet de calculer le décalage du jour de la semaine cumulé au cours de l'année selon le mois, alternant entre 2 pour les mois de 30 jours, et 3 pour les mois de 31 jours, avec une soustraction de 2 (différence entre les constantes 4 et 2 des deux formules) pour ajuster le cumul du mois de février (28 jours au lieu de 30).
  • Une année non bissextile comporte 365 jours, soit 52 semaines et 1 jour. Le jour de la semaine d'une date se décale donc d'un jour par année non bissextile, il faut donc ajouter le nombre d'années écoulées.
  • Une année bissextile comporte 366 jours, soit 52 semaines et 2 jours. Le jour de la semaine d'une date se décale donc de deux jours par année bissextile au lieu d'un seul, il faut donc ajouter en plus le nombre d'années bissextiles écoulées.
  • Une année est bissextile si elle est multiple de 4, mais non multiple de 100 à moins qu'elle soit multiple de 400. On ajoute donc l'année, l'année divisée par 4 pour le nombre d'années multiples de 4, moins (sauf) l'année divisée par 100 pour le nombre d'années multiples de 100, plus l'année divisée par 400 pour le nombre d'années multiples de 400.
  • Quand le mois est janvier ou février (m < 3) et que l'année courante est bissextile, elle ne doit pas être comptée comme écoulée car le mois de février n'est pas passé, et la formule utilise donc l'année précédente plutôt que l'année de la date.

Exemples

Quel jour de la semaine tombait le 18 janvier 1953 ?

(cas m < 3)

Le 18 janvier 1953 était un dimanche.


Quel jour de la semaine tombait le 2 août 1953 ?

(cas m > 3)

Le 2 août 1953 était un dimanche.


Quel jour de la semaine tombait le 13 mars 1998 ?

(cas m = 3)

Le 13 mars 1998 était un vendredi 13 !


Quel jour de la semaine tombait le 1er janvier 2020 ?

(cas m < 3)

Le 1er janvier 2020 était un mercredi.

Méthode 2

Pour une date de la forme jour/mois/année où « jour » prend une valeur de 01 à 31, « mois » de 01 à 12 et « année » de 1583 à 9999, utiliser la formule :

c = (14 - mois)/12

En fait, c = 1 pour janvier et février, c = 0 pour les autres mois.

a = année - c

m = mois + 12*c - 2

j = ( jour + a + a/4 - a/100 + a/400 + (31*m)/12 ) mod 7

La réponse obtenue pour j correspond alors à un jour de la semaine suivant :

0 = dimanche, 1 = lundi, 2 = mardi, etc.

Remarques

Dans toutes les divisions dans « / » dans la ligne Jour, on ne garde que la partie entière du résultat. Par exemple, 35/4= 8.

Enfin, mod 7 signifie « modulo la division par 7 », c'est-à-dire « le résultat est le reste de la division par 7 ».

(Par exemple, 23 mod 7 = 2, car le reste est 2.)

Exemple

Sur quel jour de la semaine tombe le 13 mars 2004 ?

On calcule c, a et m :

c = (14 - 3)/12 = 0, a = 2004 - 0 = 2004 et m = 3 + 12*0 - 2 = 1.

On trouve alors :

j = ( 13 + 2004 + 2004/4 - 2004/100 + 2004/400 + (31*1)/12 ) mod 7

j = ( 13 + 2004 + 501 - 20 + 5 + 2 ) mod 7

j = 2505 mod 7 = 6 (car 2505/7 = 357 et il reste 6.)

Donc le 13 mars 2004 était un samedi.

Méthode 3

En Italique, calcul du jour de la semaine de l'exemple 1er août 1947.

  1. On garde les deux derniers chiffres de l'année en question; (1947 → 47)
  2. On ajoute 1/4 de ce nombre en ignorant les restes; (47/4 = 11, reste 3 ignoré)
  3. On ajoute la journée du mois; (dans ce cas → 1)
  4. Selon le mois on ajoute
    Janvier = 0
    Février = 3
    Mars = 3
    Avril = 6
    Mai = 1 (= Ma1)
    Juin = 4
    Juillet = 6 (= 6uillet)
    Août = 2
    Septembre = 5 (= 5eptembre)
    Octobre = 0 (= 0ctobre)
    Novembre = 3
    Décembre = 5
    Entre parenthèse, des astuces pour se rappeler de cette correspondance.
  5. Si l'année est bissextile et le mois est janvier ou février, on ôte 1 , (1947 → année non bissextile)
  6. Selon le siècle, on ajoute : (19** → 0)
    Années 1600 = 6;
    Années 1700 = 4;
    Années 1800 = 2;
    Années 1900 = 0;
    Années 2000 = 6;
    Années 2100 = 4;
  7. On divise la somme par 7 et on garde le reste; (47 + 11 + 1 + 2 - 0 + 0 = 61; 61 divisé par 7 = 8, reste 5)
  8. Le reste représente le jour de la semaine recherché: (Le 1er août 1947 était un vendredi)
    0 pour Dimanche,
    1 pour Lundi,
    2 pour Mardi,
    3 pour Mercredi,
    4 pour Jeudi,
    5 pour Vendredi,
    6 pour Samedi.

De plus, on peut soustraire 28, 56 ou 84 à l'année, dès le départ, cela ne change pas le résultat.

Exemple : (19 + 4 + 1 + 2 - 0 + 0 = 26; 26 divisé par 7 = 3, reste 5). C'est un peu plus simple à faire de tête.

Avec ce qui précède, il est facile de calculer de tête le jour de la semaine correspondant à une date donnée.

Méthode 4

Cette méthode de calcul utilise la table suivante :

Valeur Année Mois (a) Mois (b) Jour Jour de la semaine
1 2 3 4 5 6 7 8
000  00  1 7 18   5 10 7 14 21 28 Lundi
+ 300  40  2 *   8 13 19 8 5 1 8 15 22 29 Mardi
 80  3 14 2 3 11 2 8 2 9 16 23 30 Mercredi
+ 200 *   4 9 15 6 3 11 3 10 17 24 31 Jeudi
 20  10 * 16 9 12 6 4 11 18 25 Vendredi
+ 100  60  *   0 5 11 4 7 9 12 5 12 19 26 Samedi
6 * 12 17 1 10 1 4   7   6 13 20 27 Dimanche

Utilisation

Une valeur de 0 à 6 (Colonne 1 : valeur) est attribuée à chaque ligne de la table. Dans cette méthode, on calcule la somme des valeurs des lignes sélectionnées à chacune des étapes suivantes (ex. : 15/12/1957) :

  1. (Colonne 2) Prendre la valeur de la ligne correspondant au siècle modulo 4 (000, 100, 200 ou 300) (ex. : 1957 → 19/4 = 3 mod 4 → 300, V = 1),
  2. (Colonne 3) Ajouter la valeur de la ligne correspondant à la vingtaine de l'année (ex. : 1957 → 40, V + 1 = 2),
  3. (Colonne 4) Ajouter la valeur de la ligne correspondant au reste de la division de l'année par 20 (ex. : 1957 → 17, V + 6 = 8),
  4. Si l'année se termine par 00 et s'il y a un « + » dans la cellule sélectionnée à l'étape 1, ajouter 1 et utiliser la colonne 5 pour le mois (ex. : 1957 pas concerné),
  5. Sinon, s'il y a un « * » dans la cellule sélectionnée à l'étape 3 (colonne 4), utiliser la colonne 6 pour le mois, sinon la colonne 5 (ex. : 1957 pas de « * », colonne 5),
  6. (Colonne 5 ou 6) Ajouter la valeur de la ligne correspondant au numéro du mois (ex. : 12, V + 4 = 12),
  7. (Colonne 7) Ajouter la valeur de la ligne correspondant au jour dans le mois (ex. : 15, V + 1 = 13),
  8. (Colonne 7) Le jour de la semaine (colonne 8) correspond à la ligne où se trouve le total dans la colonne 7 (ex. : 13, Dimanche 15/12/1957).
Valeur Année Mois (a) Mois (b) Jour Jour de la semaine
1 2 3 4 5 6 7 8
000  00  1 7 18   5 10 7 14 21 28 Lundi
+ 300  40  2 *   8 13 19 8 5 1 8 15 22 29 Mardi
 80  3 14 2 3 11 2 8 2 9 16 23 30 Mercredi
+ 200 *   4 9 15 6 3 11 3 10 17 24 31 Jeudi
 20  10 * 16 9 12 6 4 11 18 25 Vendredi
+ 100  60  *   0 5 11 4 7 9 12 5 12 19 26 Samedi
6 * 12 17 1 10 1 4   7   6 13 20 27 Dimanche

Exemple 15/12/1957 :  1 + 1 + 6 + 4 + 1  =  13  : Dimanche

Méthode 5, avec juste un peu de calcul mental !

Méthode de calcul pouvant être effectuée mentalement, expliquée par James Grime[2] sur la chaine Youtube Numberphile[3].

Constat

Quelle que soit l’année, les 04/04, 06/06, 08/08, 10/10 et 12/12, mais aussi les 05/09, 09/05, 07/11, 11/07 ainsi que le 14/03 (qui donne 3/14, soit π, en écriture US), le dernier jour de février, et enfin le 4 ou le 3 janvier selon que l’année soit bissextile ou non, tombent sur le même jour de la semaine. On peut appeler ce jour le jour de π (en référence au 3/14, soit le 14/03).

Il suffit donc de savoir quel jour de la semaine est le jour de π pour une année donnée, de prendre parmi toutes ces dates celle qui est la plus proche de la date demandée, et d’ajuster.

Détermination du jour de π pour une année donnée

Il faut se souvenir qu’en 1700, ce jour était un dimanche, en 1800 un vendredi, en 1900 un mercredi, et en 2000 un mardi. Ensuite et auparavant (dans la limite de l’adoption du calendrier grégorien), le cycle se répète ; ainsi, en 2100 le jour de π sera un dimanche et en 1600 était un mardi (du moins en France).

NB : les opérations sont beaucoup plus simples à réaliser en prenant 0 pour dimanche, 1 pour lundi, jusqu’à 6 pour samedi.

Ce tableau fait la récapitulation des seuls éléments à retenir par cœur dans cette méthode. Les autres opérations ne sont que des calculs simples.

Jour de π par siècle
Siècle Jour de π valeur
1700 dimanche 0
1800 vendredi 5
1900 mercredi 3
2000 mardi 2

Ensuite, calculer le résultat de la division entière de l’année sans le siècle par 12, y ajouter le reste de cette division et un quart de ce reste. Ceci donne la quantité à ajouter au jour de π du siècle, pour arriver au jour de π pour l’année considérée.

Si on considère qu’une année A est la somme d’un nombre S de siècles et de a années, le calcul du jour de π (Jπ) pour cette année est :

Formule
Jπ (A) = Jπ(S) + a/12 + a%12 + (a%12)/4

(a%12 signifie : le reste de la division de a par 12).

On peut se souvenir des multiples de 12 :

Multiples de 12
0 12 24 36 48 60 72 84 96
0 1 2 3 4 5 6 7 8

Évidemment, tous les calculs sont plus faciles en comptant 7 et ses multiples pour zéro.

Exemples

29 septembre 2009

Détermination du jour de π pour 2009 : 2 (parce que pour 2000 c’est un mardi, soit 2) + 0 (parce que 09/12 = 0) + 9 (parce que 09%12 = 9) + 2 (parce que 9/4 = 2) = 2 + 0 + 9 + 2 = 13 = 6. Le jour de π pour 2009 est donc 6 (samedi).

Calcul final : le jour de π, un samedi (6), le plus proche du 29 septembre est le 5 septembre ; il faut ajouter 24 jours à ce 5 septembre pour arriver au 29, soit 3 semaines plus 3 jours. Le 29 septembre 2009 est donc un 6 + 3×7 + 3 = 9 2 = mardi.

2 février 1793

Le jour de π de 1793 -> 0 (1700) + 7 (93/12) + 9 (93%12) + 2 (9/4) = 0 + (70) + (9⇒2) + 2 = 4.

2 février -> 4 (3 janvier, jour de π, 1793 n’étant pas bissextile) + 30 jours (« 33 janvier » - 3) = 4 + 4×7 + 2 = 6 : c’était un samedi.

8 mars 1975

1975 -> 3 (1900) + 6 (75/12) + 3 (75%12) + 0 (3/4) = 3 + 6 + 3 + 0 = 12 = 5;

8 mars = 14 mars (jour de π) - 6, ou bien 28 février (autre jour de π) + 8

5 - 6 = -1⇒6 ou bien 5 + (8⇒1) = 6. C’était un samedi.

15 novembre 2021

2021 : 2 (2000) + 1 (21/12) + 9 (21%12) + 2 (9/4) = 2 + 1 + (9⇒2) + 2 = 7 ⇒ 0 : Jπ(2021) = dimanche

15 novembre : 7 novembre (Jπ(2021)) + 8 = 0 + 8 = 1 : lundi.

Références

  1. http://c2.com/cgi/wiki?PerpetualCalendarAlgorithm
  2. https://twitter.com/jamesgrime
  3. The Doomsday Algorithm

Wikipédia propose un article sur : « Détermination du jour ».