加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

学习“计算星期几”新法后的体味与推敲

(2014-12-27 20:31:37)
标签:

教育

             学习“计算星期几”新法后的体味与推敲

 

                         “计算星期几”的一个新方法

 

    2014年12月21日,星期天。佛山大学退休教授杜老师,给小学四年级以上的小朋友们,在江湾社区第三课堂,讲“计算星期几”的方法。我也参加听讲,大有收获。

    杜老师讲的方法只要三步:

1  求2014年12月21日,是星期几?为叙述方便,我现在引进字母。先把年份分为A、B两段,月份

   为C、日为D,再在其下方,划上一线,写上解题时要用到的数字a、b、c、d ,称为“代表字”

   吧。先告知你:a、b、c、d分别为0、3、4、0 :

                   D

        20    14 年  12 月  21

       a=0    b=3     c=4    d=0 

2   计算a+b+c+d = e ,即 0+3+4+0=7。

3   e÷7 取余,余即为星期几。7÷7=1余0 。

  答:2014年12月21日是星期天。

 

   又如                D

           20    11年   7 月   18

           a=0    b=6     c=5     d=4

     计算0+6+5+4=15、15÷7=2余1 

    答:2011年7月18日是星期一。查年历,果然如此。

 

    杜老师又把代表字a、 b 、c 、d的算法、记法说明如下:

    1   20 (21世纪A) ,其代表字a :

凡是15  19  23打头的,a=1。注:即1500、1900、2300年的元旦是星期 1

凡是16  20  24打头的,a=0。    即1600、2000、2400年的元旦是星期 6  (作起算,a=0)

凡是17  21  25打头的,a=5。    即1700、2100、2500年的元旦是星期 5

凡是18  22  26打头的,a=3。    即1800、2200、2600年的元旦是星期 3

且以2000年元旦星期6为起算点,归为a=0。在计算1900、2100、2200等时,要加上改正数a,所以a分别为1、5、3了。

    2   由年代、年份B,计算代表字b 的方法:

B÷4 = K 余Y,

5×K+Y=Z

Z÷7=X 余 b

如 14÷4 = 3 余2、   5×3+2=17、  17÷7=2 余 3 、  得b=3

如 11÷4 = 2 余3、   5×2+3=13、  13÷7=1 余 6 、  得b=6

    3  由月份C 计算代表字c 的方法是查表:

月  份 C                    10    11    12

平年时c                             4

闰年时c                             4

    4  由日D求代表字d的方法:

D÷7=P,余 d 。如21÷7=3  余 0 ,d=0。  又如18÷7=2  余4 ,d=4。

杜老师讲的“计算星期几”的方法,的确简便,小朋友们好奇开心,但不理解原理。

 

                 二   “计算星期几”的最笨方法

    听课时,我就在思索:为什么要这样算?当时仅想到,这本质上是一个带余除法的问题,是取余或同余的问题。

    回家后,整理一下思路,认为最笨的方法,应该是先知道一个初点,例如2014年1月1日是星期三。如果要求2014年12月21日是星期几,只要算出该天隔元旦多少天,加上初始星期三,再除以7,取余数,即得该天的星期数了。

      算一算吧:2014-01-01到2014-12-21,有31+28+31+30+31+30+31+31+30+31+30+21=355日,减1,亦即隔元旦354天,354+3=357 , 357÷7=51余0,即星期天了。

 

    上述算法虽然很笨,但正是星期几星期几的基本原理:计算累加天、除以7、取余数、即可得星期数。

    累加天数很累,可以简化一下:先分段计算出每年元旦是星期几、每个月1日又是星期几,再加上所求该月的日数,那就可算得该天的累加星期几了。有了累加星期几,就÷7,得最终的星期几。我以为杜老师讲的方法,正是如此。

   下面a、b、c、d分段推敲之。

 

                三   选 初 值a=0,元旦是星期六

 

    杜老师以2000(或1600)年元旦是星期六为初点,取a=0。400年一个大循环,相隔400年的a相同。相隔100年的a分别为1、5、3 ,见上(一)的注。有了初点及a,就去算b,即以后每年的元旦是星期几。

 

 

                   四   每年元旦是星期几的算法

 

可以用最笨的累加法计算b,如下表:

 

年        一年天数               元旦是星期几   b

2000 闰年    366                                  6(初值)

2001         365       6+366=372   372÷7=53   余 1(366是2000年天数)

2002         365       1+365=366   366÷7=52   余 2(365是2001年天数)

2003         365       2+365=367   367÷7=52   余 3(365是2002年天数)

2004 闰年    366       3+365=368   368÷7=52   余 4(365是2003年天数)

2005         365       4+366=370   370÷7=52   余 6(366是2004年天数)

2006         365       6+365=371   371÷7=53   余 0(365是2005年天数)

2007         365       0+365=365   365÷7=52   余 1(365是2006年天数)

2008 闰年    366       1+365=366   366÷7=52   余 2(365是2007年天数)

2009         365                         

…           …                      略 

     这个表仅说明,每年元旦是星期几的b,是可以独立计算的,不过计算较麻烦,且要递推。

实际上,b不必递推计算,可以用宋老师讲的公式直接计算:

B÷4 = K 余Y,    5*K+Y=Z    Z÷7=X 取余 b

下面是用电子表格计算的B与b的对照表:

 

年代B

B/4

INT B

余Y

Z =5*K+Y

b

元旦是星期几

  

   0

0

0

0

0

6

1

0.25

0

1

1

1

1

2

   0.5

0

2

2

2

2

3

0.75

0

3

3

3

3

4

   1

1

0

5

5

4

5

1.25

1

1

6

6

6

6

   1.5

1

2

7

0

0

7

1.75

1

3

8

1

1

8

   2

2

0

10

3

2

9

2.25

2

1

11

4

4

10

  2.5

2

2

12

5

5

11

2.75

2

3

13

6

6

12

  3

3

0

15

1

0

13

3.25

3

1

16

2

2

14

   3.5

3

2

17

3

3

15

3.75

3

3

18

4

4

16

   4

4

0

20

6

5

17

4.25

4

1

21

0

0

18

   4.5

4

2

22

1

1

19

4.75

4

3

23

2

2

20

   5

5

0

25

4

3

21

5.25

5

1

26

5

5

22

   5.5

5

2

27

6

6

23

5.75

5

3

28

0

0

24

   6

6

0

30

2

1

25

6.25

6

1

31

3

3

26

   6.5

6

2

32

4

4

27

6.75

6

3

33

5

5

28

   7

7

0

35

0

6循环开始

29

7.25

7

1

36

1

1循环

30

   7.5

7

2

37

2

2循环

 

由上表可知:

1   每4年有一个闰年,一个小周期。平年时,计算的b与元旦星期几相同。遇闰年就多跳一天。

    闰年时,b就比元旦星期几大1。这一点在后续计算中即可抵消。

2   表中的z,实际上是累加的星期几,与除以7的余,两者是“同余”。

  每28年有一个大周期。当B数值大时,可简省计算。如B=88,用B=98-84=14代算,算得b=3

  我以为用公式  b=B + int〔B/4〕(mod 7)  更简洁。

 

              五   一年12个月,每个月1号是星期几的算法

 

    还是笨算。初点:1月1日是星期六。则有:

 

月    一月天数    平年时 各月1日 是星期几 c         闰年时 c

      31                    (初值)               5

      28       6+31=37   37÷7=5   余 2               1

      31       2+28=30   30÷7=4   余 2               2

      30       2+31=33   33÷7=4   余 5               5

      31       5+30=35   35÷7=5   余 0               0

      30       0+31=31   31÷7=4   余 3               3

      31       3+30=33   33÷7=4   余 5               5

      31       5+31=36   36÷7=5   余 1               1

      30       1+31=32   32÷7=4   余 4               4

10      31       4+30=34   34÷7=4   余 6               6

11      30       6+31=37   37÷7=5   余 2               2

12      31       2+30=32   32÷7=4   余 4               4

这6、2、2、5、0、3、5、1、4、6、2、4,就是c表中的平年值。现在见到它的来历了。

 

                六   各段合并,计算星期几       

 

    把a、b、c、d各段的星期几累加,就是余数的和,根据“余的和等于和的余”原理,

a+b+c+d = e,再÷7取余,就是最后的余数,即星期几。

 

                七   蔡勒(Zeller)公式

 

     我翻出笔记,有我在佛山国土局打工时,约2010年所记的一个“计算星期几”的公式。查电脑,才知是德国数学家蔡勒(Zeller)在1886年推导出的,通称为蔡勒公式。计算步骤是:

  先把实际年、月、日的月份,退回2个月。

  年份分两段,为世纪A、年代B,月份为C,日为D。

  累加星期   W= intA/4﹣2A+B+int〔B/4〕+int〔(13C﹣1) /5〕+D

  由W÷7取余g ,即W≡g ( mod 7)  ,g即为星期几。

 

上例 2014年12月21 日,取A=20、 B=14、 C =12-2=10 , D=21。

W = int20/4﹣2×20+14+int〔14/4〕+int〔(13×10﹣1) /5〕+21

W = 5-40+14+3+25+21 = 28 

28÷7=4   余0 ,g=0  即星期天。

又例 2010年02月25日,退回2个月,变为2009年12月25日,取A=20、 B=09、 C =12 , D=25。

W = int20/4﹣2×20+9+int〔9/4〕+int〔(13×12﹣1) /5〕+25

W = 5-40+9+2+31+25 = 32 

32÷7=4   余4 ,g=4  即星期四。

 

    比较上面讲的两种方法,我认为:

    杜老师新法,计算公式简单些,但要记一张世纪A所对应的有4个(a) 数的表、记一张月份C所对应的有12个 (c) 数的表,还要注意平年、闰年。严格的说,还是一种查表法。

    2 蔡勒公式,却是纯公式,有通用性,不必记一些特定的数。但切记要退回2个月。

   

    这就是我化了两天的时间,学习消化后的肤浅理解。但我这个老学生,不能独立推导出计算公式或方法。杜老师们学有功底、下足功夫,所得到的成果,各有秋色,令我受益、令我赞叹! 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有