任意挑一个月,一号是星期一的概率

Posted on October 26, 2012

引子

10月6日发过的一条微博,提到常常有碰到“一个月的一号是星期一”的情况:
# 这样的时候,日期和星期相同,好记。

这个月的一号是星期一,今天六号星期六,即“一个月的一号是星期一”。感觉这件事的概率比较大,随便挑了七八年翻了一下日历都发生了2次,2021年竟有3次,2月3月和11月。是不是可以证明现在的日历记法,任意挑一个月一号是星期一概率大于1/12。

微博里猜测了:

任意挑一个月,一号是星期一的概率大于1/12。

验证猜测

  1. 星期只有7种可能。(成立)
  2. 如果日历记法中没有特殊处理某个月份和某个星期的关系的话(要验证的前提),月份和星期的组合就是均匀的,
    只还不过组合是按照一个周期轮回,就像甲子记年60年一循环。
  3. 前面两点要是成立,则任意挑一个月,一号是星期一的概率是1/7,而不是1/12。

要验证上面的第2点,Google查了一下,有公式可以从年月日计算星期几。

星期的计算公式

详细可以看wikipedia上条目星期的计算上的说明。有多种算法或公式,有的是方便心算速算。

蔡勒公式很适合用于程序计算,下面是公式对应的Python代码:

def getWeek(y, m, d) :
    if m < 3 :
        --y
        m += 12
    c = y / 100
    y = y % 100
    return ( y + y/4 + c/4 - 2*c + 26*(m+1)/10 + d - 1 ) % 7

getWeek(2012, 10, 26) # Output is 5, Friday
getWeek(2012, 10, 28) # Output is 0, Sunday
getWeek(2013, 1, 1) # Output is 3, Wednesday

上面代码里,挑了3个日子,验证了一下,正确的。

得出结果

可以看到在星期计算中,月份没有特殊处理以挑选特定的星期。所以,所有的月份而言,一号是星期一的月的概率是1/7

对于所有月份这样的前提,得到的结论没有什么实际的用途,周期太长。实际关心的是,任意挑一年,一号是星期一的月最多个数?最少个数?
# 任意挑一年,一年12个月,所以任意一年“一号是星期一的月”平均个数是12/7个

这样的结论每年都可以应用,比较有实际意义,下面来看看。

任意挑一年,一号是星期一的月最多有几个?最少有几个?

从上面的计算公式中看到,1月、2月,年份有偏移,让这个推算有点麻烦,现在时间晚了,先放一下,头脑清楚的时候再来看这个问题 :)

2012年11月13日补记,这个问题解决了,参见博文“任意挑一年,一号是星期一的月最多有几个?最少有几个?”。

I hate monday