zoukankan      html  css  js  c++  java
  • 欧几里得?x

    可以去看dalao博客

    orz

    1、欧几里得算法

    带余除法定理:ab∈Z,其中b>0,存在唯一qr,使a=bq+r,其中0<=r<b;

    辗转相除法(欧几里得算法)依据:(a,b)=(b,r)

    C++实现:

    递推

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
           int n,m,r;
           cin>>m>>n;
           r=m%n;
           while(r!=0)
           {
                  m=n;
                  n=r;
                  r=m%n;
           }
           cout<<n;
    }

     递归

    int gcd (int x,int y)
    {
        return y == 0 ? gcd(y,x%y);
    }

    2.扩展欧几里得算法(裴蜀定理)

    其中ab是任意两个不全为0的整数,则存在两个整数xy,使得ax+by=(a,b);

    (a,b)=1(互素)时,使ax+by=1;

    应用:一次不定方程ax+by=c有解的充分条件是(a,b)|c(|的意思是整除);

    c++实现:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 long long exgcd(long long a,long long b,long long &x,long long &y)
     8 {
     9     if(b==0)
    10     {
    11         x=1;
    12         y=0;
    13         return a;
    14     }
    15     long long r=exgcd(b,a%b,x,y),t=x;
    16     x=y;y=t-y*(a/b);
    17     return r; 
    18 }
    19 
    20 int main()
    21 {
    22     long long a1,b1,x1,y1;
    23     cin>>a1>>b1;
    24     exgcd(a1,b1,x1,y1);
    25     while(x1<0) x1+=b1;
    26     cout<<x1;
    27     return 0;
    28 } 

    应用:1、解不定方程ax+by=c

    d=exgcd(a,b,x,y);

    If(c%d==0)有解,否则无解。

    x=c/d*x,y=c/d*y;

    x,y为原方程的一组解,|x|+|y|的值最小。

    其它的解为(x+k*b,y-k*a

    2、解线性同余方程  

    axb(mod n)

    也就是解不定方程ax-ny=b

     

    3、解模的逆元

    也就是解线性同余方程ax1(mod n).

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    安居客scrapy房产信息爬取到数据可视化(下)-可视化代码
    安居客scrapy房产信息爬取到数据可视化(上)-scrapy爬虫
    反贪风暴4-猫眼影评从爬取到可视化
    vue实战:路由监听
    vue实战——登录页面
    一个电商首页
    网页换肤
    小游戏—九宫格(拼图游戏)
    复选框(checkbox)、多选框
    CSS实现水平垂直居中
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6741002.html
Copyright © 2011-2022 走看看