• 线性组合、裴蜀定理、小凯的疑惑


    问题的起源

    已知 (a,b) 两个正整数,(ax+by) ((x,yinmathbb{Z})) 的取值范围是怎么样的?

    首先,若 (y=0),那么 (ax+by) 可以取 (cdots ,-2a,-a,0,a,2a,cdots),这些取值组成一个模 (a) 等价类 ([0]_a)

    根据整数模 (n) 的余数,我们可以将所有整数划分成 (n) 个等价类(也叫同余类、剩余类)。包含整数 (a) 的模 (n) 等价类为 ([a]_n={a+kn:kin mathbb{Z}})。例如,([3]_7={cdots,-11,-4,3,10,17,cdots}),这个集合同时也可以表示为 ([-4]_7)([10]_7)

    ——《算法导论》

    现在,我们让 (y) 逐渐增大,可以得到一系列模 (a) 等价类:([0]_a,[b]_a,[2b]_a,cdots),而这些集合的并集就是 (ax+by) ((x,yinmathbb{Z})) 所有可能的取值。

    这里以 (a=14,b=18) 为例打个表:

    [egin{array}{c} y & 0 & 1 & 2 & 3 & 4 & 5 & 6 & {color{Red}{7}} & 8 \ yb & 0 & 18 & 36 & 54 & 72 & 90 & 108 & 126 & 144 \ yb mod a & 0 & 4 & 8 & 12 & 2 & 6 & 10 & {color{Red}{0}} & 4 end{array} ]

    可以看到 (y={color{Red}{7}})(yb mod a) 的值为 (0),进而有 ([{color{Red}{7}}b]_a=[0]_a),即 (y={color{Red}{7}})(ax+by) 可能的取值与 (y=0) 时是相同的。此后 (yb mod a) 的值又会重复出现 (0,4,8,12,2,6,10),都与前面的重复了,因此也不会引入任何新的 (ax+by) 的取值。

    所以 ([0]_acup [4]_acup [8]_acup [12]_acup [2]_acup [6]_acup [10]_a) 就是 (ax+by) 所有可能的取值。

    至于这个 ({color{Red}{7}}) 是怎么来的呢?根据上面给过程,({color{Red}{7}}) 是使得 (ybequiv 0 pmod a) 的最小正整数 (y),即使得 (amid yb) 的最小正整数 (y)

    我们可以把 (a,b) 分解为 「各自特有的约数 (k_1,k_2)」 和 「公共约数 (gcd(a,b))」 两部分:(a=k_1gcd(a,b))(b=k_2gcd(a,b)) ((k_1,k_2inmathbb{Z}))

    因为 (gcd(a,b)) 已经是 (a,b) 的最大公约数了,那么剩下的部分 (k_1,k_2) 里面肯定不存在任何公约数了,即 (k_1,k_2) 互质。这样,我们可以把 (amid yb) 改写为 (k_1gcd(a,b)mid yk_2gcd(a,b)),所以最小的满足该条件的 (y)(k_1=dfrac{a}{gcd(a,b)})

    到这里,我们得出了求 (ax+by) 取值范围的一个方法:

    [{ax+by:x,yinmathbb{Z}}=igcup_{i=0}^{a/gcd(a,b)-1}[ib]_a=igcup_{i=0}^{a/gcd(a,b)-1}[ibmod a]_a ]

    再看一眼 ([0]_acup [4]_acup [8]_acup [12]_acup [2]_acup [6]_acup [10]_a),你是否觉得有着某种规律?

    排序一下:([0]_acup [2]_acup [4]_acup [6]_acup [8]_acup [10]_acup [12]_a)

    你发现,这些数的间隔恰好都是 (2),巧了,(gcd(a,b)=gcd(14,18)=2)。而且 (ax+by) 可能的取值恰好就是 (kgcd(a,b)) ((kinmathbb{Z})) 可能的取值。对于任意的 (a,b) 情况是否都如此呢?

    所有 (ax+by) 显然一定是 (gcd(a,b)) 的整数倍,因此问题的关键就是所有 (gcd(a,b)) 的整数倍是不是都能写成 (ax+by),即 (ax+by) 能否取到 (kgcd(a,b)) 的所有值。

    因为 (displaystyle{ax+by:x,yinmathbb{Z}}=igcup_{i=0}^{a/gcd(a,b)-1}[ibmod a]_a),所以只需证明 (ibmod a) ((0le i le frac{a}{gcd(a,b)} -1)) 能够取到 ([0,a-1]) 范围内的所有 (gcd(a,b)) 的倍数即可。

    怎么证明?

    (0le i le frac{a}{gcd(a,b)} -1) 范围内 (i) 的取值有 (frac{a}{gcd(a,b)}) 个,而 ([0,a-1]) 范围内 (gcd(a,b)) 的倍数也有 (frac{a}{gcd(a,b)}) 个。因此,只需证明 (ibmod a) 两两互不相同即可。

    假设 (0le i le frac{a}{gcd(a,b)} -1) 范围内存在两个数 (i_1<i_2) 使得 (i_1bmod a=i_2bmod a),即 (a|(i_2-i_1)b)

    (0le i le frac{a}{gcd(a,b)} -1)(i_2-i_1 le frac{a}{gcd(a,b)} -1),这与 (frac{a}{gcd(a,b)}) 是使得 (amid yb) 的最小正整数 (y) 相矛盾!因此 (ibmod a) 两两互不相同,也就证明了

    [oxed{{ax+by:x,yinmathbb{Z}}={kgcd(a,b):kinmathbb{Z}}} ]

    裴蜀定理

    经过上述推导之后,裴蜀定理便是显然的了。

    裴蜀定理得名于法国数学家艾蒂安·裴蜀,说明了对任何整数 (a,b) 和它们的最大公约数 (d),关于未知数 (x)(y) 的线性丢番图方程(称为裴蜀等式):

    [ax + by = m ]

    有解当且仅当 (m)(d) 的倍数。裴蜀等式有解时必然有无穷多个整数解,每组解 ((x,y)) 都称为裴蜀数,可用辗转相除法求得。

    例如,(12)(42) 的最大公因子是 (6),则方程 (12x + 42y = 6) 有解。事实上有 ((-3) imes 12 + 1 imes 42 = 6)(4 imes 12 + (-1) imes 42 = 6)

    特别来说,方程 (ax + by = 1) 有解当且仅当整数 (a)(b) 互素。

    裴蜀等式也可以用来给最大公约数定义:(d) 其实就是最小的可以写成 (ax + by) 形式的正整数。这个定义的本质是整环中「理想」的概念。因此对于多项式整环也有相应的裴蜀定理。

    小凯的疑惑

    来源:[NOIP2017 提高组] D1T1

    题目描述

    小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小 凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在 小凯无法准确支付的商品。

    输入格式

    两个正整数 (a)(b),它们之间用一个空格隔开,表示小凯中金币的面值。

    输出格式

    一个正整数 (N),表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。

    分析

    因为 (a,b) 互质,(gcd(a,b)=1),所以 ({ax+by:x,yinmathbb{Z}}={kgcd(a,b):kinmathbb{Z}}=mathbb{Z})。但是这并没有用,因为这里的 (x,y) 可以取负数,而题中 (x,y) 只能取非负数。

    形式上,本题需要求最大的不属于 ({ax+by:x,yinmathbb{N}}) 的正整数,这就需要我们分析 (ax+by) ((x,yinmathbb{N})) 的取值范围。

    我们可以仿照前面的思想,记 ([x]_a^+ = [x]_a cap [x,+infty))(这个符号是我自己定义的新符号),那么

    [{ax+by:x,yinmathbb{N}} = igcup_{i=0}^{a/gcd(a,b)-1}[ib]^+_a = igcup_{i=0}^{a-1}[ib]^+_a ]

    (a=5, b=7) 为例打个表:

    [egin{array}{lllllll} i & 0 & 1 & 2 & 3 & 4 \ ib & 0 & 7 & 14 & 21 & 28 \ [ib]_a^+ & {0,5,10,cdots} & {7,12,17,cdots} & {14,19,24,cdots} & {21,26,31,cdots} & {28,33,38,cdots} end{array} ]

    这里贴一张大佬做的图:

    从图中可以明显看出 (28) 上面的一个数就是不能支付的最昂贵价值。

    严谨地讲就是:

    因为 ({ax+by:x,yinmathbb{Z}}=mathbb{Z})(displaystyle{ax+by:x,yinmathbb{Z}}=igcup_{i=0}^{a/gcd(a,b)-1}[ib]_a=igcup_{i=0}^{a-1}[ib]_a)

    所以 (displaystyleigcup_{i=0}^{a-1}[ib]_a =mathbb{Z}),所以 (displaystyleigcup_{i=0}^{a-1}left([ib]_acap[0,+infty) ight)=mathbb{N})

    (displaystyle{ax+by:x,yinmathbb{N}} = igcup_{i=0}^{a-1}[ib]^+_a)(记为集合 (A)

    所以 (displaystylecomplement_{mathbb{N}} A=igcup_{i=0}^{a-1}left([ib]_acap[0,ib-1] ight)=igcup_{i=0}^{a-1}left([ib]_acap[0,ib-a] ight))

    所以 (max(complement_{mathbb{N}} A)=(a-1)b-a=ab-a-b)

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/1024th/p/14350512.html
Copyright © 2020-2023  润新知