Nov 23

    在各种文明的算术发展过程中,乘法运算的产生是很重要的一步。一个文明可以比较顺利地发展出计数方法和加减法运算,但要想创造一套简单可行的乘法运算方法却不那么容易。我们目前使用的乘法竖式计算看似简便,实际上这需要我们事先掌握九九乘法口诀表;考虑到这一点,这种竖式计算并不是完美的。我们即将看到,在数学的发展过程中,不同的文明创造出了哪些不同的乘法运算方法,其中有的运算法甚至可以完全抛弃乘法表。
    古巴比伦数学使用60进制,考古发现的一块古巴比伦泥板证实了这一点。这块泥板上有一个正方形,对角线上有四个数字1, 24, 51, 10。最初发现这块泥板时人们并不知道这是什么意思,后来某牛人惊讶地发现,如果把这些数字当作60进制的三位小数的话,得到的正好是单位正方形对角线长度的近似值:1 + 24/60 + 51/60^2 + 10/60^3 = 1.41421296296...  这说明古巴比伦已经掌握了勾股定理。60进制的使用为古巴比伦数学的乘法运算发展带来了很大的障碍,因为如果你要背59-59乘法口诀表的话,至少也得背1000多项,等你把它背完了后我期末论文估计都已经全写完了。另一项考古发现告诉了我们古巴比伦数学的乘法运算如何避免使用乘法表。考古学家们发现一些泥板上刻有60以内的平方表,利用公式ab = [(a+b)^2 - a^2 - b^2]/2 可以迅速查表得到ab的值。另一个公式则是ab = [(a+b)^2 - (a-b)^2]/4,这说明两个数相乘只需取它们的和平方与差平方的差,再两次取半即可。平方数的频繁使用很可能加速了古巴比伦人发现勾股定理的过程。
    古巴比伦数学把除以一个数看作是乘以它的倒数,利用倒数表可以很方便的实现这种算法。倒数表开头的一部分是这个样子:


2      0; 30
3      0; 20
4      0; 15
5      0; 12
6      0; 10
8      0; 7, 30
9      0; 6, 40
10     0; 6
12     0; 5
15     0; 4
16     0; 3, 45
18     0; 3, 20
20     0; 3
....    ....


    
    古巴比伦人很早就发现,1/7是一个无限小数,怎么除也除不完。古巴比伦的倒数表里所有的数都是精确的小数,它们(在60进制中)都是有限小数。碰到无限小数时,他们会用取近似值的方法来解决。例如,古巴比伦人会通过1/13 = 1*(1/13) = 7*(1/91) ≈ 7*(1/90) = 7*(40/3600) = (7*40)/3600 来计算1/13的值。那个40就是查倒数表查出来的。


    古埃及数学使用了完全不同的乘法运算法。它们的乘法运算不需要借助任何辅助用表。古埃及人注意到,任何一个数都可以表示为若干个不同的2的幂的和。因此,你需要做的仅仅是不断将1和乘数进行翻倍。看看古埃及人如何计算46乘以22:

  46 x 22 = 1012
   1   22
   2   44     44
   4   88   + 88
   8  176  + 176
  16  352
  32  704  + 704
          -------
            1012


    上面的演算中,左列是1不断翻倍的结果,右边是22不断翻倍的结果。选出左列的2, 4, 8, 32,它们的和正好就是被乘数46;那么把右列对应的数加起来就是乘法运算的最终结果。至于如何选出2, 4, 8, 32这四个数,一个简单的方法就是,不断选出左列里小于被乘数的数中最大的一个,然后当前被乘数减去它。比如,32是最大的数,用46-32后剩14;8是小于14的最大数,14-8后剩6;然后最大的小于6的数是4,6减去4后剩2,这样下来2+4+8+32正好就是被乘数46了。这其实就是二进制的经典应用,2, 4, 8, 32正好与46的二进制中的数字1一一对应。你可以在这里看到一些相关的东西。
    无独有偶,据说俄国农村曾产生过这样一种乘法算术法:将被乘数逐次减半,同时乘数依次加倍,那么找出所有左边的数是奇数的行,其右列的数的和就是答案。例如,下面的例子中,23, 11, 5和1都是奇数,于是右边对应的44, 88, 176和704的和就是乘法运算的结果。这个做法与古埃及的算术法完全一样,但看起来似乎更神奇一些。

  46 x 22 = 1012
  46   22
  23   44     44
  11   88   + 88
   5  176  + 176
   2  352
   1  704  + 704
          -------
            1012


做人要厚道
转贴请注明出处

Aug 25
一个只有数字9的时钟
icon1 Matrix67 |icon2 Brain Storm | icon4 2007-08-25 12:50 | icon312 Comments »

  
上图是一个非常牛的钟,钟面上的数字1到12全部是用数字9表示出来的,更绝的是每个算式恰好用了三个9 ! (反光处很可能写的是(9/9)^9 )

当然,这种事并不只有数字9能够做出来。比如,只使用三个4也可以构造出12以内的自然数:
1 = (√4 + √4)/4 = (√4*√4)/4
2 = (4 + 4)/4
3 = 4 - 4/4
4 = 4 + 4 - 4 = 4*4/4
5 = 4 + 4/4
6 = 4 + 4/√4
7 = 4!! - 4/4
8 = 4!! + 4 - 4
9 = 4!! + 4/4
10 = (√4 + √4)/.4 = 4!! + 4/√4
11 = 44/4
12 = 4 + 4 + 4 = 4*4 - 4

May 25

偶然发现的一个网页,希望大家别说我火星。
http://www.stetson.edu/~efriedma/numbers.html

Apr 23
几个很强的数列
icon1 Matrix67 |icon2 Brain Storm | icon4 2006-04-23 13:42 | icon310 Comments »

Aronson's sequence:
1, 4, 11, 16, 24, 29, 33, 35, 39, 45, 47, 51, 56, 58, 62, 64, ...
whose definition is:
T is the first, fourth, eleventh, ... letter of this sentence

0, 0, 0, 0, 4, 9, 5, 1, 1, 0, 55, 55, 1, 0, 1, 9, 5, 1, 1, 0, ...
这个比较强:把1,2,3,4,5, ...写成英文
one, two, three, four, five, six, seven, eigth, nine, ten
然后删掉除c,d,i,l,m,v,x以外的字母,变成罗马数字。

Golomb's sequence:
1,2,2,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,9,10,10,10,10,10 ...
定义:a(1)=1, a(n)表示n在这个数列里出现的次数

Emirps:
13, 17, 31, 37, 71, 73, 79, 97, 107, 113, 149, 157, 167, 179, 199, ...
就是一个Prime(质数)倒过来写也是质数

'Eban' numbers (the letter 'e' is banned!).
2, 4, 6, 30, 32, 34, 36, 40, 42, 44, 46, 50, 52, 54, 56, 60, 62, 64, 66, 2000, 2002, 2004, 2006, 2030, 2032, 2034, 2036, 2040, ...

Nov 14

给定一个仅包括加法运算的算式,请计算出结果。

算式以类似下面的形式给出:

@ @@@ @@@ @ @ @@@  @  @@@ @@@ @@@ @@@ @@@
@   @   @ @ @ @    @  @     @ @ @ @ @ @ @
@ @@@ @@@ @@@ @@@ @@@ @@@   @ @@@ @@@ @ @
@ @     @   @   @  @  @ @   @ @ @   @ @ @
@ @@@ @@@   @ @@@  @  @@@   @ @@@ @@@ @@@

数字和+号的位置大小比例以及笔画长短粗细间距都是可变的。例如上面的算式也可以是这样:

         @@@@
@@  @@@  @@@@     @@@          @@@ @@@ @@@          @@@@@
@@  @@@    @@     @       @@@    @ @ @ @ @          @@@@@
@@    @  @@@@ @ @ @    @  @      @ @ @ @ @          @@ @@
@@  @@@  @@@@ @@@ @@@ @@@ @@@    @ @@@ @@@          @@@@@
@@  @      @@   @   @  @  @ @    @ @ @   @          @@@@@
@@  @@@  @@@@   @ @@@  @  @@@    @ @@@ @@@
         @@@@          @
                       @

但是保证不会发生笔画的缺损断裂歪斜扭曲等情况,所有字符在外形上都是可以辨识的,不会与其他字符发生混淆。相邻两个字符之间至少使用一列空格符分隔。

输入文件expression.in中包含了一个算式,文件总行数不超过100,每行不超过100个字符。运算的最终结果不超过10000000。算式只由@组成。

在expression.out中输出单独一行一个整数表示最终的运算结果。

输入样例:
                             @
                             @     @
  @@@@@@@@@@@@@@@            @
  @@@@@@@@@@@@@@@            @
  @@@@@@@@@@@@@@@            @              @@@@@@@@@@@@@@@@ @@@
  @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@                            @
  @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@                            @
  @@@@@@@@@@@@@@@            @          @                    @
   @@@@@@@@@@@@@@                    @ @@@                   @
                                        @                    @
                                                             @@@
                                                               @
                                                             @@@

输出样例:33

Jul 22

    判断一个数的整除性对于某些除数来说是一件非常容易的事,比如2、3、4、5、6、8、9、10、11、12、15……
    但是对于7来说一直是一个难题,而判定是否被7整除在数字运算中又比较常用。我刚看到一种判定能否被7整除的方法,在这里写一下。
    比如,我们要看86415能否被7整除。首先我们把它从个位开始往左边走两个数字一组划分开来,这样,86415就划分成8 64 15;然后,从左开始“一加一减找余数”:

    6       6
    8  64  15
        1

    看上面,6+8正好被7整除,64-1被7整除,15+6被7整除。
    然后把找到的余数从右往左读出来,616,现在,如果616能被7整除,那么86415就能被7整除。
    如果你还看不出616能被7整除的话,可以继续这样做下去:

    1
    6  16
        2

    现在很明显了吧,21能被7整除。因此,86415就能被7整除。
    下面我再举一个例子:6913580247。

     1       5       2
    69  13  58  02  47
         6       2

    22561

    5       2
    2  25  61
        4

    245能被7整除,因此6913580247能被7整除。

    更加奇妙的是,这个方法对于判定被11整除、被13整除同样有效。
    至于为什么,我没仔细研究,估计和那个有关。看到7、11、13这三个数,你难道还想不起那个吗?
    最后补充:比较流行的割位法对于三位数、四位数比较简便;但位数一多,显然这种方法比较简便。6913580247我们用这种方法只做了两次,用割位法要做9次!

    做人要厚道,转帖请注明出处。

     更新的日志 »