zoukankan      html  css  js  c++  java
  • 欧几里得算法

    1.欧几里得

    gcd(a, b) = gcd(b, a%b)

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

    2.欧几里得扩展

    参考:https://www.cnblogs.com/Aiahtwo/p/10894280.html

    求给定的ax+by = c的一组最小正解

    当c%gcd(a, b) = 0时不定式有解,即对ax+by = gcd(a, b)求出一组特解(x0, y0),由欧几里得定律当a%b = b = 0时a即为gcd(a, b),此时令x = 1, y = 0即为当前状态的一组解,

    逐层递归由bx'+a%b*y' = gcd(b, a%b) =>  ay' + b(x'-a/b*y') = gcd(b, a%b)  可得 x = y, y = x'-a/b*y'

    而对于一组特解(x0, y0),a*c/gcd*x0+b*c/gcd*y0 = c,可知通解x = c/gcd*x0+k*(b/gcd),y = c/gcd*y0-k*(a/gcd),令b1 = b/gcd

    则最小x = (x%b1+b1)%b1, y = (c-a*x)/b

    int ex_gcd(int a, int b, int &x, int &y){
        if(!b){
            x = 1, y = 0;
            return a;
        }
        int d = ex_gcd(b, a%b, x, y);
        int temp = x;
        x = y;
        y = temp-a/b*y;
        return d;
    }
    View Code
  • 相关阅读:
    【实践】mysql数据库表设计及存储过程设计
    # Java类链接模型
    java gc
    Spring Data Jpa
    Spring Security
    Amazon SQS 消息队列服务
    JMS概述
    jdk 7&8 new features
    java jri null
    java.lang.OutOfMemoryError: PermGen space
  • 原文地址:https://www.cnblogs.com/microcodes/p/12031430.html
Copyright © 2011-2022 走看看