跨越千年的RSA算法

    数论,数学中的皇冠,最纯粹的数学。早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的思维游戏中。直到计算机诞生之后,几千年来的数论研究成果突然有了实际的应用,这个过程可以说是最为激动人心的数学话题之一。最近我在《程序员》杂志上连载了《跨越千年的 RSA 算法》,但受篇幅限制,只有一万字左右的内容。其实,从数论到 RSA 算法,里面的数学之美哪里是一万字能扯完的?在写作的过程中,我查了很多资料,找到了很多漂亮的例子,也积累了很多个人的思考,但最终都因为篇幅原因没有加进《程序员》的文章中。今天,我想重新梳理一下线索,把所有值得分享的内容一次性地呈现在这篇长文中,希望大家会有所收获。需要注意的是,本文有意为了照顾可读性而牺牲了严谨性。很多具体内容都仅作了直观解释,一些“显然如此”的细节实际上是需要证明的。如果你希望看到有关定理及其证明的严格表述,可以参见任意一本初等数论的书。把本文作为初等数论的学习读物是非常危险的。最后,希望大家能够积极指出文章中的缺陷,我会不断地做出修改。

======= 更新记录 =======

2012 年 12 月 15 日:发布全文。
2012 年 12 月 18 日:修改了几处表达。
2021 年 9 月 13 日:根据 Chang 的指正做了修改。

======== 目录 ========

(一)可公度线段
(二)中国剩余定理
(三)扩展的辗转相除
(四)Fermat 小定理
(五)公钥加密的可能性
(六)RSA 算法

Read more…

难倒犹太人的五个数学问题

    这个 Blog 已经不止一次提到过难倒犹太人的“棺材问题”了。很多年以前,要想进入莫斯科国立大学的数学系,你必须通过四项入学考试;头两个都是数学考试,一个笔试,一个面试。在面试中,学生和考官都是一对一的,考官可以自由向学生提出任何他喜欢的问题。考官们都准备了很多“棺材问题”,这些问题的答案非常简单,但由于思路太巧妙了,以至于学生很难想到。考官便可以以“你连这个都没想到”为理由,光明正大地拒绝学校不想要的人(主要是犹太人)。之前我们曾经介绍过一个典型的“棺材问题”:空间四边形外切于给定球,求证四切点共面。去年的这个时候,我们还介绍了同样机智巧妙的 11 个问题

    民间还流传着很多其他的“棺材问题”列表。 Ilan Vardi 曾经写过一篇题为 Mekh-Mat Entrance Examinations Problems 的论文,收集了 25 个“棺材问题”,并给出了解答。这篇论文被收录进了 You Failed Your Math Test, Comrade Einstein 一书中。 Ilan Vardi 发现,这 25 个问题的“难法”有所不同。虽然其中不乏思路奇巧的好题,但也有不少步骤繁琐(当然也有可能是还没找到好的解法)、题意不清甚至结论错误的题目。这里,我选择了其中五个有趣的题目,写下来和大家一同分享。

Read more…

几个精彩的数论问题

从同事那里借来了一本单墫教授主编的《初等数论》奥数书,看到很多精彩的问题,在这里做个笔记,与大家一同分享。不少问题和答案都有过重新叙述,个别问题有所改动。

 
问题:找出所有使得 2n – 1 能被 7 整除的正整数 n 。

答案:由于 2n 的二进制表达为 1000…00 (n 个 0),因此 2n – 1 的二进制表达为 111…11 (n 个 1)。而 7 的二进制表达是 111 ,要想让它整除 n 个 1 ,显然 n 必须是也只能是 3 的倍数。

Read more…

经典证明:几乎所有有理数都是无理数的无理数次方

    一个无理数的无理数次方是否有可能是一个有理数?这是一个非常经典的老问题了。答案是肯定的,证明方法非常巧妙:考虑根号 2 的根号 2 次方。如果这个数是有理数,问题就已经解决了。如果这个数是无理数,那么就有:

      

    我们同样会得到一个无理数的无理数次方是有理数的例子。

    这是一个典型的非构造性证明的例子:我们证明了无理数的无理数次方有可能等于有理数,但却并没有给出一个确凿的例子。毕竟我们也不知道,真实情况究竟是上述推理中的哪一种。那么,真实情况究竟是上述推理中的哪一种呢? Gelfond-Schneider 定理告诉我们,假设 α 和 β 都是代数数,如果 α 不等于 0 和 1 ,并且 β 不是有理数,那么 α 的 β 次方一定是超越数。根据这一定理我们可以立即看出,根号 2 的根号 2 次方真的是一个无理数,实际情况应该是上述推理中的后者。

    那么,是否存在一个无理数 a ,使得 a 的 a 次方是有理数呢?最近, Stan Dolan 证明了这样一个结论:事实上,几乎所有 (1, ∞) 里的有理数都是某个无理数 a 的 a 次方。

Read more…

用抛物线筛选质数

    今天见到一种看上去很帅的质数筛选法。在平面直角坐标系上画出抛物线 y = x2 的图像,然后标出抛物线上的所有格点(两坐标均为整数的点)。其中,只有点 (0, 0) 正好在 y 轴上,其余的点要么在 y 轴左侧,要么在 y 轴右侧。把 y 轴左侧除了 (-1, 1) 以外的所有格点与 y 轴右侧除了 (1, 1) 以外的所有格点相连,这些连线将自动避开 y 轴上纵坐标为质数的点。连接足够多的线条之后,质数就逐渐露了出来。

      

    这是因为, (-a, a2) 和 (b, b2) 的连线将经过 (0, a · b) ,这可以通过计算斜率的方法得到验证。这个颇具创意的质数筛选法叫做 visual sieve ,它是由 Yuri Matiyasevich 和 Boris Stechkin 提出的。

查看更多:
http://plus.maths.org/content/catching-primes
http://www.mathteacherctk.com/blog/2011/10/the-parabolic-sieve-of-prime-numbers/