最近实验室工作很烦,而且额外又接了点写网站的工作,一直在学web编程,没来得及写poj了。不过今天从网上看到了一个挺好玩的题,突然来了兴趣想做做。
题目很简单 求最小的正整数M,使得任意比M大的整数N都有N=140*a+9*b+6*c,其中a b c都是自然数
先设定了一个范围,用穷举的方式得到了问题的解。但从分析的角度来说,穷举肯定是不行了,需要一种特别的思路。那么就想到了以下的几个等式
+1 = 15*9+6-140 3*140 = 44*9+4*6 2*9 = 3*6
第一个等式给出的是对+1操作的定义,提供了可以通过140 9 6三个因子表示所有自然数的可能
后两个等式则给出了三个因子之间的换算关系,后面的关键步骤都会用到它
那么如果N=140*a+9*b+6*c满足条件,N+1也满足条件,也就是说N=140*(a-1)+9*(b+15)+6*(c+1)满足条件
很显然,如果a>=1,那么N+1满足条件是一定成立的。但是还存在另一种情况,就是a=0的情况。这种情况下就不能简单地使用我们定义的+1算子了,因为可能会出现a-1<0的情况,不符合题义要求。为了避免这种情况,我们就必须要求b和c能够转换出140的项,也就是说,能满足条件的N一定大于3*140-141=279(+1乘子中的相加项)
那我们从279开始,279=280+140-15*9-6一定可以
280=140*2有140系数
281=140+15*9+6有140系数
282=30*9+2*6没有140系数! 注意,30*9+2*6+1=30*9+2*6+15*9+6-140=45*9+3*6-140=43*9+6*6-140,9和6的项无论如何不能演化成140*3的形式!所以282+1无法用三因子表示
283就不能拆分成标准形式,所以283不满足条件
284=140+16*9
285=31*9+6 下面看285+1=31*9+6+15*9+6 -140 = 46*9+2*6 - 140 = 44*9+5*6-140 = 3*140 + 2*6 -140 = 2*140 +2*6,所以286也满足条件了
而且从285开始,所有拆分项中a=0的数,都可以如法炮制,保证N+1也满足条件。那么最大的不满足条件的自然数就是283,也就是说M=284