zoukankan      html  css  js  c++  java
  • 扩展欧几里得

    直线上的点

    求直线 ax + by + c = 0 上有多少个整点( x , y ) 满足 x ∈ [ x1 , x2] , y ∈ [ y1 , y2 ] 。

    扩展欧几里得算法

    ax + by = gcd(a,b)

    求(x,y)

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

    一组解为(u , v)

    任取另外一组解为(n , m)

    那么 au + bv = an + bm;

    变形得 a(u - n) = b(m - v)

    假设g = gcd(a,b)

    方程左右两边同时除以g

    得a`(u - n) = b`(m - v)

    其中 a` = a / g  ,  b`= b / g;

    注意,此时a` 和 b` 互质

    因此 u - n 一定是 b` 得整数倍

    设它为 kb`,

    计算得 m - v = ka`

    因此可以得出如下结论

    • 设 a,b,c 为任意整数。若方程ax + by = c的一组整数解为(x,y),则它的任意整数解都可以写成(x + kb` , y - ka`);其中a`=a/gcd(a,b) , b`=b/gcd(a,b) ,k取任意整数。

    于是得出如如下结论

    • 设 a,b,c 为任意整数,g= gcd(a,b),方程 ax + by = g的一组解是(x,y)
    • 则当c是g的倍数时,ax+by=c的一组解是(xc/g,yc/g);
    • 当c不是g的倍数时,无整数解。
  • 相关阅读:
    SQL之层次查询
    GROUP函数
    SQL之统计
    正则表达式
    聚合函数,分析函数
    oracle函数
    Vue3.0优化
    浅谈FC
    短链接生成原理
    Vue路由传参
  • 原文地址:https://www.cnblogs.com/darlingroot/p/11019086.html
Copyright © 2011-2022 走看看