拓展欧几里得+例题~

扩展欧几里德算法:

应用:

①求解不定方程

②求解同余方程

③求解模的逆元

看欧拉定理看吐了也还是有超级~~多的题目不会做,看的有晕又困!难受,看会别的压压惊~~希望拓展欧几里德的题目能对我稍稍稍稍稍稍的友好点~~

拓展欧几里得定理最初的贝祖定理是,如果a、b是整数,那么一定存在x、y,使ax+by=gcd(a,b),换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍。

即如果ax+by=1,那么ab一定互质,gcd(a,b)=1。

那么只要求出最大公约数就能知道到底可不可以成立啦~~

巴特!身为一个优秀的学生,我们必须知道的不是是否有解而是解是多少,这就迫使我们需要去寻找ax+by与最大公约数的关系,经过大佬们严密的推算,得出 x = y1 , y = x1 – a/b*y1,这就是我们利用拓展欧几里得算法的中心公式哒!大佬博客在这里!

模板大大:

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

这里求出来的就是特解x0,y0,对于ax+by=d来说,x增加b/d,y减少a/d等式一直成立(x增加了a*b/d,y增加了a*b/d,都是变化了一个最小公倍数),所以鸭,只要按着这个最小公倍数的方法变化,就可以得到其他所有的解啦(无论是x最小还是y最小),所以通解公式如下:

x = x0 + (b/gcd)*t;
y = y0 - (a/gcd)*t;

更一般来说,如果不知道d与ab的最小公约数的关系,可以现用d%gcd(a,b)!=0,那么等式无解,否则如果d% gcd(a,b) == 0 且d / gcd(a,b) = t,那么求出方程 a * x + b * y = gcd(a,b)的所有解x,y,将x,y乘上t,对应的x’,y’即是方程a * x + b * y = t * gcd(a,b)的解!

拓展欧几里得呵呵哒不过如此 lv_1

*UVA10104 Euclid Problem 终于看见令人感动的模板题了!

拓展欧几里得还是有点点让人头秃的呜呜呜  lv_8

*HDU1576 A/B 大概最基本的题目,其他的题目都比他难了吧,可能算一道入门提,由于我太菜,不可能放进第一个题目下了,很惭愧。我第一眼想到的是用乘法逆元,本来以为我又想错了思路,再仔细一想,其实大概拓展欧几里得就是可以求乘法逆元??(不过我是由费马小定理求的这个乘法逆元就是了hhh,实在想试试拓展欧几里得也不是不可以鸭~~)

*UVALive6428 A+B 普通模板题目~~公式给的十分露骨,符合上文的更一般情况的题目……坑点在于a、b、s可能是0。

*1352 集合计数  大概是,不知道是拓展欧几里得的题目的话,就不可能知道它该怎么做了吧!(知道了我也不会嘤嘤嘤~),知道了之后也有一个特别的步骤,那就是求集合数,怎么求呢?就是求出x最小时y的大小,以及y最小时x大小,两个x相减的值就是集合数目啦~~

*poj 1061 青蛙的约会 也算是一个很经典的题目了,第一次看的印象还在~~详情……还是翻8月20八九的训练日记吧

*bzoj  2242: [SDOI2011]计算器 三个公式:

1、给定y,z,p,计算Y^Z Mod P 的值;

2、给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数;

3、给定y,z,p,计算满足Y^x ≡ Z ( mod P)的最小非负整数。

第一个公式显然快速幂,第二个公式显然拓展欧几里得,第三个是一个高阶同余方程,是要用到GSBS算法的,不过也是一个模板题就是辽~~模板不好背哇~~

* poj 2115 C looooops 这个公式的列出是难点。再就是求最小x的时候用的是一个很新颖的方法(因为那个循环减去b/d的方法太耗时啦~~,就先是求出了这个公式的解x、y,再利用了:

b=b/gcd(a,b);
printf("%lld\n",(x%b+b)%b);

求得最小的整数解x~~y的话呀,利用ax+by=c来带入求值呀。

*SGU 106 The equation  比起拓展欧几里得改进了一点点,不过难度也仅限于这个范围了,因为它直接告诉了你公式,相当于直接提示用拓展欧几里得做了。(需要特判a=0/b=0/a=b=c=0/a=b=0等特殊情况)

由于x=x0+b/gcd(a,b)*t;给出x的范围,进而就可以求出x有几对了。(可以用(x2-x)/(b/d)求出还可以增加几部分,减少类似,求得增加中x与y较少的,减少中x与y更大的,然后相减(如果用x-x1就相加)得出结果~~

*Codeforces Beta Round #7 C.Line 也是告诉了公式,要求的是x+y大于零的对数。不知道为什么不需要判断这个,可能所有的情况都满足?反正写上特判也不算很多时间吧~~~

拓展欧几里得哥求你放过我!! lv_0

 

你可能感兴趣的:(数论)