zoukankan      html  css  js  c++  java
  • 数论-- 欧几里得算法,扩展欧几里得算法

    欧几里得算法(gcd)

    就是辗转相除法

    作用:求gcd(a,b)

    公式:

    [gcd(a,b) = gcd(b,a\%b) ]

    写法1:

    int gcd(int a , int b ){
        return !b ? a : gcd(b, a % b);
    }
    

    写法2 :位运算(超快) (a,b不能为0)

    int gcd(int a , int b){
    	while(b ^= a ^= b ^= a %= b);
    	return a;
    }
    

    详解看这里

    扩展欧几里得算法(exgcd)

    用途:1.求二元一次方程的特解,通解 2.求乘法逆元

    裴蜀定理:

    对于任意正整数 (a) , (b) ,一定存在整数 (x) , (y) ,使得

    [ax+by == gcd(a,b) ]

    且对于任意 (x) ,(y)(ax+by) 一定是d的倍数 [d为gcd(a,b)]

    扩展欧几里得算法的作用:

    exgcd提供了一种算法,对于任意(a,b),都能求出 (ax+by=d) 的解 (x,y)
    顺便还能求出gcd

    int exgcd( int a , int b , int &x , int &y ){
        if(b == 0){
            x = 1;
            y = 0;
            return a;
        }
        int ans = exgcd( b , a % b , x , y );
        int temp = x;
        x = y;
        y = temp - a / b * y;
        return ans;
    }
    

    解释:
    讲的很清晰

    通解:待补

  • 相关阅读:
    内置常量
    python100练
    python之禅
    Django
    pymsql入门
    jQuery事件
    数据库(索引)
    算法基础知识
    数据库(查询专项)
    数据库(所有人都坐下!这是基本操作!)
  • 原文地址:https://www.cnblogs.com/w-w-t/p/13769015.html
Copyright © 2011-2022 走看看