引子
10月6日发过的一条微博,提到常常有碰到“一个月的一号是星期一”的情况:
# 这样的时候,日期和星期相同,好记。
这个月的一号是星期一,今天六号星期六,即“一个月的一号是星期一”。感觉这件事的概率比较大,随便挑了七八年翻了一下日历都发生了2次,2021年竟有3次,2月3月和11月。是不是可以证明现在的日历记法,任意挑一个月一号是星期一概率大于1/12。
微博里猜测了:
任意挑一个月,一号是星期一的概率大于1/12。
验证猜测
- 星期只有7种可能。(成立)
- 如果日历记法中没有特殊处理某个月份和某个星期的关系的话(要验证的前提),月份和星期的组合就是均匀的,
只还不过组合是按照一个周期轮回,就像甲子记年60年一循环。 - 前面两点要是成立,则任意挑一个月,一号是星期一的概率是1/7,而不是1/12。
要验证上面的第2点,Google查了一下,有公式可以从年月日计算星期几。
星期的计算公式
详细可以看wikipedia上条目星期的计算上的说明。有多种算法或公式,有的是方便心算速算。
蔡勒公式很适合用于程序计算,下面是公式对应的Python代码:
上面代码里,挑了3个日子,验证了一下,正确的。
得出结果
可以看到在星期计算中,月份没有特殊处理以挑选特定的星期。所以,所有的月份而言,一号是星期一的月的概率是1/7。
对于所有月份这样的前提,得到的结论没有什么实际的用途,周期太长。实际关心的是,任意挑一年,一号是星期一的月最多个数?最少个数?
# 任意挑一年,一年12个月,所以任意一年“一号是星期一的月”平均个数是12/7个。
这样的结论每年都可以应用,比较有实际意义,下面来看看。
任意挑一年,一号是星期一的月最多有几个?最少有几个?
从上面的计算公式中看到,1月、2月,年份有偏移,让这个推算有点麻烦,现在时间晚了,先放一下,头脑清楚的时候再来看这个问题 :)
2012年11月13日补记,这个问题解决了,参见博文“任意挑一年,一号是星期一的月最多有几个?最少有几个?”。
FEATURED TAGS
生活
blog
Java
shell
Unix/Linux
unix
Groovy
jms
mom
middleware
extension
log4j
philosophy
原则
最佳实践
Shell
generic
gnu
windows
cmd
tips
dubbo
Service
设计
class
date
i/o
api
design
服务
优劣
Linux
git
week
日期
星期
计算
月份
命令行
配置
Windows
Dubbo
约定
权限
Command Line
发布
java
cooma
release
微容器
github
microcontainer
扩展点
容器