zoukankan      html  css  js  c++  java
  • 扩展欧几里得-Exgcd

    用途:

      扩展欧几里得主要是用来求解形如 (ax+byequiv gcd(a,b)) 的方程((a),(b) 已知)的正整数解中x最小的一组。

    下为推导:

      令 (x=y_2,y=x_2-[a/b]y_2)

      (a)(y_2)(+b)((x_2-[a/b]y_2))(=gcd(a,b))

      (ay_2+b(x_2-[a/b]y_2)=gcd()(b,amod b)())

      (bx_2)(+ay_2-)(b[a/b]y_2)(=gcd(b,amod b))

      (bx_2+)((a-b[a/b])y_2)(=gcd(b,amod b))

      (bx_2+)((amod b))(y_2=gcd(b,amod b))

       这个方程就是把(ax+byequiv gcd(a,b))中的((a,b))变成了((b,amod b))而已。就这样,我们求出这个方程的(x_2)(y_2),自然就能倒推原方程中的(x)(y)了。这样一直迭代下去,(b)每次总会变为(amod b),也就是不断逼近(gcd(a,b))。而当(b=gcd(a,b))的时候,(amod b=0),这样(x_2=1)成为了一组通解(与(y_2)无关)。

    void exgcd(ll a,ll b,ll& x,ll& y){
    	if(!b)return y=0,x=1,void();
    	exgcd(b,a%b,y,x);
    	y-=(a/b)*x;
    }
    
  • 相关阅读:
    微信小程序-----校园头条详细开发之注册登录
    微信小程序-----校园头条详细开发之首页
    day 99天
    day 98天
    day 97 VUE第一天
    day 96
    day 95天
    day 94 RestFramework序列化组件与视图view
    day 93 Restframwork
    day 92
  • 原文地址:https://www.cnblogs.com/xiong-6/p/11389930.html
Copyright © 2011-2022 走看看