Feb 20
奇妙的心电图数列
icon1 Matrix67 |icon2 Brain Storm | icon4 2010-02-20 0:06 | icon321 Comments »

    心电图数列 (EKG Sequence) 的定义简单而有趣:第一项为 1 ,第二项为 2 ,以后的每一项都是最小的和前一项不互质并且不曾出现过的数。换句话说,数列 a(1)=1 , a(2)=2 ,且当 n>2 时取 a(n) 为所有满足以下两个条件的数中最小的那一个:该数与 a(n-1) 有大于 1 的公约数,并且该数与前面 n-1 项都不相等。心电图数列的前面 20 项为

      1, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, 18, 14, 7, 21, 24, 16, 20, 22, 11 ...

    为什么它叫做心电图数列呢?原因很简单——因为把它描绘在图象上时,看上去像一张心电图。

 

查看更多 »

Jan 29

    搞过 OI/ACM 的同学们想必对一道经典题目印象极深:求 n 的阶乘末尾有多少个 0 。注意到末尾的一个 0 是由一个因子 2 和一个因子 5 相乘产生的;但在 n 的阶乘里,因子 5 的个数通常远远少于因子 2 。因此这个问题就等价于问 n 的阶乘里有多少个因子 5 。在 n 的阶乘式中,每个 5 的倍数里都含有一个因子 5 ,每个 25 的倍数里都还含有另外一个因子 5 ,每个 125 的倍数里都还有第三个因子 5 ……因此, n 的阶乘里因子 5 的个数的计算公式就是 ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ... 。如果把 K 的阶乘里素因子 p 的个数记作 Φ(p, K) ,则 Φ(p, K) = Σ⌊K/(p^i)⌋ 。有意思的是,最近 The American Mathematical Monthly 上的一篇文章利用这个公式瞬间证明了素数无穷多的定理。

    如果素数是有限的,则 K 的阶乘就可以写成所有 p^Φ(p, K) 的乘积,其中的 p 取遍所有的素数。注意到 Φ(p, K) = Σ⌊K/(p^i)⌋ < Σ(K/(p^i)) = K/(p-1) < K ,因此对任意正整数 K 都有 K! < (Πp)^K ,其中 Πp 表示所有素数的乘积。但当 K 充分大的时候, K! 显然会超过一个常数的 K 次方,矛盾。因此素数不可能是有限的。

 
来源:http://www.cut-the-knot.org/wiki-math

Jan 21

    UyHiP上个月的题目:把所有大于 1 的自然数划分成两个集合,证明至少能在其中一个集合里找到互不相同的三个数 a 、 b 、 c 满足 a^b=c 。然后,试着给出一种划分,使得只有其中一个集合里存在这样的三元组。
    Update: 后一个问题要求两个集合都是无限集。感谢网友 Triple.J 的提醒。

    证明:如果集合 A 里只有有限个数,那就在集合 B 里选两个比集合 A 中的最大数还大的数 a 和 b ,显然 a^b 也在集合 B 里。类似的,若集合 B 里只有有限个数,我们立即可知 A 中存在满足 a^b=c 的三元组。因此,我们只需要讨论两个集合里都有无穷多个数的情况。
    从集合 A 里选一个数 x ,从集合 B 里选一个数 y 。无妨假设 xy 在集合 A 中。在集合 A 中选一个比 xy 大的数 r 。由于集合 A 是无限大的,因此这样的数总存在。由于 r 比 xy 大,因此 x 、 y 、 xy 、 r 、 r^x 、 r^(xy) 这六个数两两不同。为了避免在同一集合里出现满足要求的三元组, r^x 和 r^(xy) 都必须在集合B里面,但这样的话, r^x 、 y 和 r^(xy) 就成了符合要求的三元组了。
    后一个问题则出奇的简单:把所有素数放进一个集合,所有合数放进另一个集合。显然,一个素数不可能是另一个素数的整数次幂

    这个月的题目非常有意思,点击这里围观。

Jan 6

    偶然读到一个非常帅的证明:用信息熵可以瞬间证明素数有无穷多个。这个证明比本 Blog 之前讲过的五种非主流证明 (282, 539, 1678) 看上去都要帅。
    假设我们从所有不超过 n 的自然数中随机选取一个数 N ,并把它分解成质因数的乘积 N = P1^X1 * P2^X2 * ... * Pm^Xm,其中 m 是不超过 n 的素数的个数。注意到由于 2^Xi ≤ Pi^Xi ≤ N ≤ n 对所有 i 都成立,因此我们有 Xi ≤ log(n) 。真正帅的地方来了。考虑随机选取一个 N 带来的信息熵,我们有:

log(n) = H(N)
         = H(X1, X2, ..., Xm)
         ≤ H(X1) + H(X2) + ... + H(Xm)
         ≤ log(log(n)+1) * m

    上面的第一个等号是由信息熵的定义直接得出的。第二个等号是由唯一分解定理得到的:由于一个数可以唯一地分解为质因数的乘积,因此 N 和 (X1, X2, ..., Xm) 是一一对应的,知道了前者也就确定了后者,它们的信息熵是相同的。第三行的不等式是由于我们放开了 Xi 的取值条件(每个 Xi 独立取值可能会导致它们的乘积超过 n ),必然会增加结果的不确定性。而每个 Xi 的取值范围不会超出 0 到 log(n) ,最多 log(n)+1 种情况,因此 H(Xi) ≤ log(log(n)+1) ,这就得到了第四行的那个不等式。
    整理上式,我们得到了 m ≥ log(n) / log(log(n)+1) ,这不但告诉我们当 n 趋于无穷大时不超过 n 的素数个数也是趋于无穷的,还给出了不超过 n 的素数个数的一个下界。

Apr 5

    去年就看过Proofs from THE BOOK第一章中的素数无穷多的拓扑学证明,不过当时似乎并没有看懂。今天看到cut-the-knot的一篇新文章,又把Proofs from THE BOOK拿出来翻了一下,终于看明白了,果然是一个令人拍案叫绝的经典证明,可谓又一神来之笔。

    定义N(a,b) = {a + nb| n∈Z},例如N(1,3)就等于{..., -5, -2, 1, 4, 7, ...}。每一个N(a,b)实质上都是一个以b为公差的“双向无限等差数列”。我们说整数集Z上的一个子集S是开的,如果集合S为空,或者对于任意一个a∈S,总能找到一个b>0使得N(a,b)⊆S。形象地说,开集的意思就是,集合中的每一个元素都能在集合内扩展出一个无限长的双向等差数列。我们又称一个集合S是闭的,如果它是某个开集的补集。
    显然,有限个开集的并集仍然是开集。
    假设S_1和S_2都是开集,如果a∈S_1∩S_2,并且N(a,b1)⊆S_1,N(a,b2)⊆S_2,那么S_1∩S_2中有一个公差为b1*b2的含a的双向无限等差数列,也即a∈N(a, b1*b2)⊆S_1∩S_2。这说明,有限个开集的交集仍然是开集。
    再假设C_1和C_2都是闭集。由De Morgan定律,C_1和C_2的并集就相等于它们各自的补集相交后再取补集,由定义可知它们的补集都是开集,而由上面的结论可知开集的交集仍是开集。于是,C_1和C_2的并集是某个开集的补集,这说明闭集的并仍然是闭集。类似地,闭集的交集相当于补集的并集的补集,它也仍然是闭的。

    还有两点值得引起我们注意:
    1. 任意非空开集都是无穷的。这由定义可以直接看出来。
    2. 任一双向无限等差数列N(a,b)既是开集又是闭集。由定义可知N(a,b)是开集,而同时N(a,b)又可以看作是N(a+1,b)∪N(a+2,b)∪N(a+3,b)∪...∪N(a+b-1,b)的补集,这是有限个开集的并集的补集,说明N(a,b)也是闭集。

查看更多 »

Jan 21

    电影中经常出现这样的情节:有一份绝密文件需要交给5位特工,为了防止某个特工被捕或者叛变,5名特工各自只持有其中1/5的文件(更好的做法是只持有其中1/5的密钥),这5名特工需要同时在场才能获取文件全文。但这也有一个隐患:如果真的有特工被抓了,当坏人们发现只拿到其中一份文件没有任何用处的同时,特工们也会因为少一份文件无法解开全文而烦恼。此时,你或许会想,是否有什么办法能够让特工们仍然能够恢复原文,即使一部分特工被抓住了?换句话说,有没有什么密文发布方式使得,只要5个人中半数以上的人在场就可以解开绝密文件?这样的话,侵入者必须要能操纵半数以上的特工才可能对秘密文件造成实质性的影响。这种秘密共享方式被称为(3,5)门限方案,意即5个人中至少3人在场才能解开密文。

    实现(m,n)门限方案的一个传统办法是,把这份文件的密钥拆成C(n,m-1)份,每个人持有C(n-1,m-1)份密钥。在(3,5)门限方案中,我们需要C(5,2)=10个密钥,不妨分别用0到9编号;5个特工各持有6个密钥,密钥的分配如下:

特工#1: 012345
特工#2: 012   678
特工#3: 0  34 67 9
特工#4:  1 3 56 89
特工#5:   2 45 789

    上述分配表的构造其实很简单:为特工的每一种5选3组合分配一个密钥,例如把密钥0分给特工1、2、3,把密钥1分给特工1、2、4,把密钥9分给特工3、4、5。这样的话,任意两个人在场都无法打开文件,因为他们始终缺少一把钥匙(这把钥匙分给了其余三个人)。而任意三个人在场都足以打开文件,因为根据鸽笼原理,任何一个5选3组合中总有一个人落在这三个人当中。这样,我们便利用组合数学巧妙地解决了这一问题。

查看更多 »

Dec 11

    说到“密码学”,大多数人的第一念头或许是Morse电码、Ceasar移位密码、同音替换密码之类的东西。这些东西在各类小说中都已是老面孔了,“字母e在英文中出现频率最高”这一最基本的破密码方法已经是耳熟能详了。几天前和网易的云风聊了一下,突然体会到了密码学的真谛。密码学关注更多的并不是加密解密的各种数学算法,而是在已有数学算法上如何实现各种安全需求。防止消息泄露只是众多安全问题中的冰山一角,而这个问题本身又有很多复杂的变化。

    当我们谈到“消息泄露”时,我们头脑中想到的往往是,在信息传输过程中如何防止第三方截获。当然,小偷防是防不住的,不过我能保证他偷到东西也没用。双方只需要事先约定一套加密函数和解密函数,以密文的方式进行传输,这样便能很好地防止消息泄露。但有时候,“消息泄露”的内涵复杂得多,加密解密的传统方法并不适用。考虑这么一个问题:10个人坐在一起谈天,突然他们想知道他们的平均年薪,但又都不愿意透露自己的工资数额。有没有什么办法让他们能够得出答案,并且不用担心自己的年薪被曝光?事实上,最简单的解决办法不需要依赖任何密码学知识:第一个人随便想一个大数,比如880516。然后他在纸条上写下这个数与自己的年薪之和,传给第二个人;第二个人再在这个数上加上他的年薪数额,写在另一张纸条上传给第三个人;直到最后一个人把纸条传回第一个人后,第一个人把纸条上的数减去只有自己知道的那个880516,便得到了全部10个人的工资和。

查看更多 »

Aug 23

    来自MathPuzzle的消息:新一轮的Al Zimmermann编程大赛开始了。这次比赛的问题描述如下:

对于一个给定的n,找出n个正整数,使得通过它们之间的加减运算能够得到尽可能多的质数。

    具体的说,对于一个指定的n,参数选手需要提交n个数A1, A2, ..., An。这n个数将由公式ΣAi*Ci产生3^n个和(其中每个Ci可以取-1、0和1中的任一个),这3^n个和中(不同的)质数越多越好。例如,当n=4时,10, 29, 82, 106可以产生9个不同的质数:

5 = 106 + 10 - 82 - 29
19 = 29 - 10
29 = 29
43 = 82 - 29 - 10
53 = 82 - 29
67 = 106 - 29 - 10
101 = 82 + 29 - 10
149 = 106 + 82 - 29 -10
227 = 106 + 82 + 29 + 10

    参赛者需要完成n=3, 4, ..., 14共12个问题,提交的每一组数的和不能超过2^32-1。比赛将在2008年11月10日结束,你可以在此之前提交任意多次。获胜者可以从下面两个网页中任选一个雕刻品作为奖品。说实话,奖品很诱人,我很想要。
    http://www.bathsheba.com/sculpt/
    http://www.bathsheba.com/math/

« 更早的日志