zoukankan      html  css  js  c++  java
  • 数学知识-扩展欧几里得

    扩展欧几里得算法

    算法原理

     代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    
    int exgcd(int a,int b,int &x,int &y)
    {
        if(!b)
        {
            x=1,y=0;
            return a;
        }
        int d=exgcd(b,a%b,y,x);
        y-=a/b*x;
        return d;
    }
    
    int main()
    {
        int i,j;
        cin>>n;
        while(n--)
        {
            int a,b,x,y;
            cin>>a>>b;
            exgcd(a,b,x,y);
            cout<<x<<" "<<y<<endl;
        }
        return 0;
    }

    线性同余方程

    算法原理

     代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int n;
    
    int exgcd(int a,int b,int &x,int &y)
    {
        if(!b)
        {
            x=1,y=0;
            return a;
        }
        int d=exgcd(b,a%b,y,x);
        y-=a/b*x;
        return d;
    }
    
    int main()
    {
        int i,j;
        cin>>n;
        while(n--)
        {
            int a,b,x,y,m;
            cin>>a>>b>>m;
            int d=exgcd(a,m,x,y);
            if(b%d)
                puts("impossible");
            else
                cout<<(ll)x*(b/d)%m<<endl;
        }
        return 0;
    }
  • 相关阅读:
    H
    饭卡(0 1背包)
    J
    H
    E
    3991: [SDOI2015]寻宝游戏
    CF 1051 F. The Shortest Statement
    CF 643 E. Bear and Destroying Subtrees
    4567: [Scoi2016]背单词
    4946: [Noi2017]蔬菜
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/14396088.html
Copyright © 2011-2022 走看看