zoukankan      html  css  js  c++  java
  • P1082 同余方程

    题意:给定a,b,求$ax equiv 1 pmod b$的最小正整数解x,保证有解

    exgcd:求$ax+by=gcd(a,b)$的 一组解x,y

      首先根据正常的gcd可得出   $gcd(a,b)=gcd(b,a\%b)$

      假设我们已经得到了一组解x' y'

      则 $bx'+(a\%b)y'=gcd(b,a\%b)$

      则 $ax+by=gcd(a,b)=gcd(b,a\%b)=bx'+(a\%b)y'$

      而且$a\%b=a-lfloorfrac{a}{b} floor*b$

      所以$ax+by=bx'+(a-lfloorfrac{a}{b} floor*b)y'$

      $a(x)+b(y)=a(y')+b(x'-lfloorfrac{a}{b} floor*y')$

      对应相等

        $x=y'$
        $y=x'-lfloorfrac{a}{b} floor*y'$

      一直递归求解,若b=0

      则x=1 y=0 就行了

    对于方程 $ax equiv b pmod c$有解,当且仅当gcd(a,c)|b

    所以对于此题gcd(a,b)|1

    貌似给你ab互质了啊

    所以。。。。

    直接用

    ax+by=gcd(a,b)=1

    求解就行了

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define int long long
    #define olinr return
    #define _ 0
    #define love_nmr 0
    #define DB double
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')
                f=-f;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^48);
            ch=getchar();
        }
        return x*f;
    }
    inline void put(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>9)
            put(x/10);
        putchar(x%10+'0');
    }
    inline void exgcd(int a,int b,int &x,int &y)
    {
        if(!b)
        {
            x=1;
            y=0;
            return;
        }
        exgcd(b,a%b,x,y);
        int t=x-a/b*y;
        x=y;
        y=t;
    }
    signed main()
    {
        int a,b,x,y;
        a=read();
        b=read();
        exgcd(a,b,x,y);
        while(x<0) x+=b;
        put(x);
        olinr ~~(0^_^0)+love_nmr;
    }
  • 相关阅读:
    macos linux 命令行显示当前全路径方法
    mac 下面使用apidoc 使用
    du 统计文件夹大小
    mac 共享文件和mount挂载数据
    linux与linux、windows之间文件共享的几种方式
    Yaf安装和配置
    设计模式之 里氏替换原则
    设计模式之单一职责原则
    微信支付 遇到问题总结
    bash shell 快捷键
  • 原文地址:https://www.cnblogs.com/olinr/p/9542465.html
Copyright © 2011-2022 走看看