不可表示的数——庞果网

来源:互联网 发布:格灵深瞳 知乎 衰败 编辑:程序博客网 时间:2024/06/05 15:40
来自庞果网,由于群里已经基本把解法透露的差不错了,所以将我当时想到的数学证明贴出来。之所以说是数学证明,因为这道题看似是算法题,其实是数学题目。
题目详情

以下是题目详情:

给定表达式[x/2] + y + x * y, 其中x,y都是正整数。其中的中括号表示下取整,例如[3/2] = 1 , [5/2]  = 2。

有些正整数可以用上述表达式表达出来,例如正整数2,当取x = y = 1时,可以把2表达出来

( 解释下:当x=y=1时, [x / 2] + y + x * y = [1 / 2] + 1 + 1 * 1 = 0+1+1 = 2 );

有些数可以有多种方式表达,例如13可以由 x = 2 y = 4 以及x = 3 y = 3来表示;

有些数无法用这个表达式表达出来,比如3。

从1开始第n个不能用这个表达式表示出来的数,我们叫做an,例如a1=1 a2=3,给定n,求an。


输入:n值 1<=n<=40

输出:an % 1000000007的结果(因为结果较大,输出an %1000000007的结果)。


下面分情况讨论一下这道题:




式①和式②就是我们获取的表达式。所谓不可能数,就是一个数n,既不能被公式②表示,

也不能被公式①表示。

先看式②,如果对任意一个n+1进行分解(分解成若干由素数组成的乘积形式,这里每个

素数称为因子,将奇数因子称为奇因子,将偶数因子称为偶因子)。可以假设n+1有一个奇素

因子,则让这个奇素因子等于2y+1,那么,剩下的因子相乘组成一个数,又由于k >= 0,k+1

可以标示任意正整数,所以剩下的组成的这个数必定可以由k+1表示。所以,只要n+1有奇因

子,则n必定能被②式表示。因此,只有当n+1的分解只有偶因子时,n才不能被②式表示。而

2是唯一的偶素数,可以作为偶因子,所以,n+1必定是2^m的形式。

同时,如果n同时也不能被公式①所表示,那么,n就是不可能数。

下面看一下,我们找到的公式②不能表示的n在什么条件下,也不能被公式①表示。
由于2^m = n+1,则,n = 2^m-1,带入①式,我们得到:2^(m+1) - 1 = (2k+1)(2y+1)(请

注意,2^(m+1) - 1是一个奇数。而2y+1和2k+1这两个奇数,最小都是3)。如果 2^m-1是一个

素数,它只能被分解成1和他本身的素数。而2y+1和2k+1这两个奇数都大于3,所以,2^m-1是

素数时,不能被①式表示。如果2^m-1不是素数,那么他可以分解成两个都大于1的奇数相

,而2y+1和2k+1可以表示所有大于1的奇数。因此,此时2^m-1必定能够由(2k+1)(2y+1)表

示。总结一下,2^m+1是素数①式不能表示它,2^m+1不是素数,①式一定能够表示它。(除

素数和1外,所有的奇数,都能够分解成两个大于1的奇数相乘)。

于是,结论出来了,n具有2^m-1的形式,并且,2n + 1 = 2^(m+1) - 1,必定是个素数,

这样的数才是不可能数。

加粗的为数论的非常非常基本的结论,在此不证明。分析到此为止,剩下的问题是如何

寻找这样的数,这不是一般的人能够完成的,现代计算机科学这么发达,使劲浑身解数,也

只是获得了零星的一点结果,仅仅找到几十个这样的数,据有人证明,这样的数有无数多个。

路漫漫兮其修远。


举几个例子:2^2-1=3是素数,则2^1-1=1是第一个不可能数

2^3-1=7是素数,则2^2-1=3是不可能数

2^5-1=31是素数,则2^4-1=15是不可能数

2^7-1=127是素数,则2^6-1=63是不可能数

2^13-1=8191是素数,则2^12-1=4095是不可能数

2^17-1=131071是素数,则2^16-1=65535是不可能数

原创粉丝点击