程序员圣诞节
今天不光是万圣节,31 OCT,也就是 25 DEC,所以也是程序员圣诞节。
。。。
好吧,OCT 代表八进制,八进制的 31,是十进制的 25,而十进制是 DEC。嗯,标准的程序员冷笑话,认真你就输了。
(我仿佛听到了郭德纲的响声在我耳边想起:你有病吧,你有药啊)
进制这个东西,很有意思。我们要感谢进化过程中,人类进化出的是五根手指,如果是 7 根手指,那么我们日常生活的进制就是 14 进制,小学数学的难度大概率要陡增 —— 因为要背 13x13 乘法表。
平日生活中,除了占绝对优势的十进制外,我们还使用十二进制(买袜子鸡蛋什么的),六十进制(计时以及角度的分和秒),三百六十进制(角度),三百六十五进制(计日)。有些文化中会使用二十进制,比如 84 非要说成四个二十和一个四,自己给自己找麻烦。在程序员的生活中,十进制不是主流,二进制,十六进制和八进制才是王道。衍生出来的 64 进制,二十六个字母大小写加十个数字再加两个符号,也堂而皇之出现在主流圈子里,之后,为了解决 IlO0 傻傻分不清的问题,比特币又从 64 进制中衍生出来 58 进制。
我们讲进制,比如二进制,是逢二进一,所以自最低位起,往上是 $2^1$,$2^2$,一路走上去。对于一个 x 进制数,我们以此类推:
$$ \begin{array}{l} 十进制:&8493&=8\times10^3+4\times10^2+9\times10^1+3\ 二进制:&1101&=1\times2^3+1\times2^2+0\times2^1+1\ x进制:&3409&=3x^3+4x^2+0x^1+9 &\text{假设 x>9} \end{array} $$
这就有意思了,原来一个多项式代表的是一个进制未知的数!那么我们是否可以把多项式的乘除用我们惯用的十进制乘除来表述呢?
比如 $x^3+3x^2+5x+15$ 除以 $x+3$ 怎么算?在初高中的时候,我们需要对这个多项式进行因式分解,分解起来并不容易。而我们将其看做十进制的数字,就是 135(15),也就是 1365,除以13,得 105,再把 10 进制转换成 x 进制,得到:$x^2+5$。完美。乘法也是如此 —— 只是要注意进位写成 135(15) 的形式,不要往上进。
列位可能要问了,那 $x^2-1$ 这样含有负数的多项式除以 $x-1$ 怎么办?$x^2-1$ 放成十进制来看,是 (100-1),而 $x-1$ 是 (10-1),除出来的结果是 11,换算回来是 $x+1$。轻松搞定!注意这里有借有还,比如 $x-1$ 乘以 $x^3+x^2+x+1$,是 (10-1) 乘以 1111,得 9999,我们需要将其还原成 (10000-1),也就是 $x^4-1$。
既然进位系统可以是 2,3,5,10,60,365,那么可不可以是 0.5 呢?哈,0.5 进位意味着个位数置一,十位数就进二,然后百位数进四,一路无穷下去。这是个奇怪的进位系统,任何数都无穷无尽。
那么 1.5 进制呢?也就是说逢三进二?1.5 进制的 20 代表十进制 3,2100 代表十进制的 9。这个进制写成表达式是 $2\times1.5^3+1.5^2$。
所以逢 x 进 y 的进制的一个数 1234,代表 $(x/y)^3+2\times(x/y)^2+3\times(x/y)+4$。很好很奇葩。有什么用?似乎没用。数学上的东西就是这样,就像庄子所谓「有用之无用」:今子有大树,患其无用,何不树之於无何有之乡,广莫之野?
扯了一堆有的没的,有些是给小宝讲数学时她傻乎乎问的,有些是我看了网上的视频琢磨的。程序员圣诞节本不该扯这些玩意的,伤脑。还是给大家看今晚万圣节我拍的 10 张图吧: