八皇后问题算什么,来看看无穷皇后问题吧

    当 1848 年国际象棋玩家 Max Bezzel 提出八皇后问题(eight queens puzzle)时,他恐怕怎么也想不到,100 多年以后,这个问题竟然成为了编程学习中最重要的必修课之一。八皇后问题听上去非常简单:把八个皇后放在国际象棋棋盘上,使得这八个皇后互相之间不攻击(国际象棋棋盘是一个 8×8 的方阵,皇后则可以朝横竖斜八个方向中的任意一个方向走任意多步)。虽然这个问题一共有 92 个解,但要想徒手找出一个解来也并不容易。下图就是其中一个解:

     

    八皇后问题有很多变种,不过再怎么也不会比下面这个变种版本更帅:请你设计一种方案,在一个无穷大的棋盘的每一行每一列里都放置一个皇后,使得所有皇后互相之间都不攻击。具体地说,假设这个棋盘的左下角在原点处,从下到上有无穷多行,从左到右有无穷多列,你需要找出一个全体正整数的排列方式 a1, a2, a3, … ,使得当你把第一个皇后放在第一行的第 a1 列,把第二个皇后放在第二行的第 a2 列,等等,那么任意两个皇后之间都不会互相攻击。

     

Read more…

又一种证明素数无穷多的方法

    今天又学到一种证明素数无穷多的方法。它是由 Filip Saidak 发现的,论文曾发表在 2006 年的 The American Mathematical Monthly 上。

    首先注意到,两个相邻自然数一定是互质的(否则,假设它们有大于 1 的公因数 k ,则它们的差也能被 k 整除,这显然是不可能的)。现在,取一个自然数 n > 1 。由于 n 和 n + 1 是相邻自然数,因此 n 和 n + 1 是互质的。也就是说,n 的质因数和 n + 1 的质因数完全没有重合,因而 n(n + 1) 至少有两个不同的质因数。类似地,由于 n(n + 1) 和 n(n + 1) +1 是相邻自然数,因此它们是互质的,这说明 n(n + 1) 和 n(n + 1) +1 没有相同的质因数,也就是说 (n(n + 1))(n(n + 1) +1) 至少有三个不同的质因数。我们可以无限地这样推下去,从而得出,素数必然是无穷多的。

Read more…

生成函数的妙用:平均抛掷多少次硬币才会出现连续两个正面?

    在一篇老日志中,我提到了一个经典的概率问题:平均需要抛掷多少次硬币,才会首次出现连续两个正面?它的答案是 6 次。它的计算方法大致如下。

    首先,让我们来考虑这样一个问题: k 枚硬币摆成一排,其中每一枚硬币都可正可反;如果里面没有相邻的正面,则一共有多少种可能的情况?这可以用递推的思想来解决。不妨用 f(k) 来表示摆放 k 枚硬币的方案数。我们可以把这些方案分成两类:最后一枚硬币是反面,或者最后一枚硬币是正面。如果是前一种情形,则我们只需要看前 k – 1 枚硬币有多少摆法就可以了;如果是后一种情形,那么倒数第二枚硬币必须是反面,因而这种情形下的方案数就取决于前 k – 2 枚硬币的摆放方案数。因此我们得到, f(k) = f(k – 1) + f(k – 2) 。由于摆放一枚硬币有两种方案,摆放两枚硬币有三种方案,因而事实上 f(k) 就等于 Fk+2 ,其中 Fi 表示 Fibonacci 数列 1, 1, 2, 3, 5, 8, …的第 i 项。

    而“抛掷第 k 次才出现连续两个正面”的意思就是,最后三枚硬币是反、正、正,并且前面 k – 3 枚硬币中正面都不相邻。因此,在所有 2k 种可能的硬币正反序列中,只有 Fk-1 个是满足要求的。也就是说,我们有 F1 / 4 的概率在第二次抛币就得到了连续两个正面,有 F2 / 8 的概率在第三次得到连续两个正面,有 F3 / 16 的概率在第四次得到连续两个正面⋯⋯因此,我们要求的期望值就等于:

     

Read more…