zoukankan      html  css  js  c++  java
  • 线性组合、裴蜀定理、小凯的疑惑

    问题的起源

    已知 (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)

  • 相关阅读:
    Oracle执行查询报错ORA-01034: ORACLE not available
    shell echo单行和多行文字定向写入到文件中
    oracle查看EM管理器状态显示Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
    正确使用 Element $confirm 方法,联调删除接口
    Express 统一配置响应头 header 方法
    jquery.i18n.properties.js 实现多语言
    navicat导出数据结构到word
    RabbitMQ用户角色及权限控制
    chrome谷歌浏览器自动填充用户名密码错位
    JVM性能调优参数整理
  • 原文地址:https://www.cnblogs.com/1024th/p/14350512.html
Copyright © 2011-2022 走看看