不可表示数求解分析

我把庞果英雄上面的“不可表示数”的题目放到stackoverflow上后,一位国际友人给出一个相当漂亮的分析。

原题:

给定表达式[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.

----------------------------------------------------------------------------------------------------------

求解分析:

我们分别来看x为奇数和偶数的情形.

如果x是奇数,那么x=2k1,k为任意正整数,然后我们可以得到

n=(k1)+y2k=2ky+k1=y(2k+1)1

注意到y是任意正整数,2k+1是大于1的奇数,表达式 y(2k+1)  可以生成任何含有奇数因子的正整数. 因此,如果一个数n有解,那么n+1就含有奇数因子. 所以为了让n无解, n+1只能为1,或者2的幂. 但是我们知道n不可能为0,因为x,y都是正整数.

我们推导出对于所有无解的数n都有n+1是2的幂,因此我们可以写出所有无解的数的表达式   2^m1 ,

m是任意正整数.


再来看看x为偶数的情形.

           n=2^m1=k+y(2k+1)=k+2ky+y

看看2n+1:

          2n+1=2^(m+1)1=2k+4ky+2y+1=(2k+1)(2y+1)

2k+1和2y+1都是任意的奇数. 因为2n+1是奇数,我们推导出2n+1可分解, 对于x为偶数是所有有解的数n都具有这个性质. 

因此,我们可以得出当且仅当n+1为2的幂,且2n+1为素数时n是无解的.

事实上, 2n+1是一个梅森素数, 所以an = ( Mn - 1) / 2 其中,Mn为第n个梅森素数.

梅森素数可网上查找,查找到之后这个问题就非常简单了.

stackoverflow链接


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值