这个题就是说给我们两个价值,然后不限我们每个价值的数量。求最大的的一个不能被am+bn表示的数。
复杂的公式推导我觉得大家都不想去看,我们直接用传统的方法让大家理解。希望大家认真看下去,可能有的人会觉得简单,但是想看的就看看哈。
我们只推导m和n互素的情况下,为什么最大不能被组合的数是(m-1)n-m;
对于他们不互素的情况,只是扩展欧几里得的一个应用,其他的很多人都有推论。
我们针对m来说明说明这个问题,如果我们得到的数M全是m的倍数,那么这个数肯定能够得到。此时我们就不需要n而已(a*m+0*n);
也就是M%m=0的情况。
有人就会问了,那么M%m=1呢?,那么M%m=2呢?…………
后面的请直接看表
当m=3,n=5的时候的情况例举
枚举前26个数来说明。
余数 | |||||||||
0 | 0 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 |
1 | 1 | 4 | 7 | 10 | 13 | 16 | 19 | 22 | 25 |
2 | 2 | 5 | 8 | 11 | 14 | 17 | 20 | 23 | 26 |
我们针对m就可以把所有的数字按余数不同分成3类:0,1,,2
对于第一行,那么看到了什么呢?是不是都能表示?,就是我们所说的那种都是用m来表示的。不需要n
对于第二和第三行,有没有能被表示出来的呢?首先第二行都不是m的倍数,那么我们就需要找到一个n的倍数的数,在n的倍数那个数之后的所有数都能被表示出来,因为我们这里是有循环的,是m一循环,所以得到的数字就可以这样表示:xn+a*m;
为什么n的倍数会出现在其他的行中呢?其实很简单,就是因为他们两个数互素的,(c*n)%m{c<m}就能得到m的所有余数。所以他会出现在其他行的每一列。
试着去理解一下,我尽量写的很直白了,但是太多字咯,抱歉。
现在我们就只需要去找最小的n的倍数,他也就是在该行中最小的能被表示的数字。他前面的那个也就是不能表示的该行最大的数。怎么找呢?就是:n的倍数-m。因为是m一循环。
现在我们是不是需要找到一个最大的n的倍数,然后他的前一个也就是最大的不能表示的数。最大的n的倍数就是(m-1)*n,我如果取m*n的情况的话,就和0*m的情况在同一列。所以,最大的找到了,在他前面就是(m-1)*n-m;
好咯,感谢你耐心听我废话。