zoukankan      html  css  js  c++  java
  • 解线性不定方程

    1,

    定义:线性不定方程是指ax + by = c。

    2,

    给出整数a, b, c,先求出一组解,然
    后讨论如何表示通解(所有解)。首先设gcd(a; b) = d。如果c不是d的倍数,那么方程
    无解,因为左边是d的倍数,而右边不是。在有解的情况,设c = c0 £ d,则可以先求
    出ax + by = d的一组(x0; y0),则ax0 + by0 = d,两边乘以c0得:a(c0x0) + b(c0y0) = c,因
    此(c0x0; c0y0)是原方程的一组解。换句话说,核心问题是:求ax + by = gcd(a; b)的解。

    3,

    下面的扩展euclid算法求出了这样一组解。

    void gcd(int a , int b , int & d , int & x , int & y)
    {
        if (!b){ d = a; x = 1; y = 0; }
        else 
        {
        gcd(b , a%b , d , y , x ); // (**)
        y -= x*(a/b);
        }
    }

    4,证明:

    用数学归纳法可以证明它的正确性。归纳基础:

    b = 0时,gcd(a; 0) = a,取x =1; y = 0,有ax + by = a ¢ 1 + 0 ¢ 0 = a = gcd(a; 0),成立。

    先假设i次迭代以后,(**)行得到了正确的结果,即返回值y0和x0满足:
    by0 + (a mod b)x0 = gcd(b; a mod b) = gcd(a; b) = d 
    经过步骤y¡ = x0 ¤ (a=b)后,新的数对(x; y)满足:
    ax + by = ax0 + b(y0 ¡ x0(a=b)) = ax0 + by0 ¡ bx0(a=b) = s 
    这里的a=b是整除运算,它等于(a ¡ a mod b)=b,

    因此s = ax0 +by0 ¡bx0(a¡a mod b)=b = ax0 +by0 ¡ax0 +(a mod b)x0 = by0 +(a mod b)x0 = d

  • 相关阅读:
    【Storm篇】--Storm从初始到分布式搭建
    【Storm篇】--Storm 容错机制
    git命令log与reflog的比较
    长时间不操作Navicat或Putty会断线?
    git使用ssh密钥
    公钥能用公钥解吗?
    什么是公钥,,什么是密钥啊 ?有什么区别吗?
    CSS滑动门
    Html设置文本换行与不按行操作
    设置鼠标光标与页面favicon
  • 原文地址:https://www.cnblogs.com/RoitAGI/p/5686429.html
Copyright © 2011-2022 走看看