zoukankan      html  css  js  c++  java
  • ACM数论之旅4---扩展欧几里德算法(欧几里德(・∀・)?是谁?)

    为什么老是碰上

    扩展欧几里德算法

    ( •̀∀•́ )最讨厌数论了

    看来是时候学一学了

    度娘百科说:

    首先, ax+by = gcd(a, b) 这个公式肯定有解 (( •̀∀•́ )她说根据数论中的相关定理可以证明,反正我信了)

    所以 ax+by = gcd(a, b) * k 也肯定有解 (废话,把x和y乘k倍就好了)

    所以,这个公式我们写作ax+by = d,(gcd(a, b) | d)

    gcd(a, b) | d,表示d能整除gcd,这个符号在数学上经常见

    那么已知 a,b 求 一组解 x,y 满足 ax+by = gcd(a, b) 这个公式

     1 #include<cstdio>
     2 typedef long long LL;
     3 void extend_Eulid(LL a, LL b, LL &x, LL &y, LL &d){
     4     if (!b) {d = a, x = 1, y = 0;}
     5     else{
     6         extend_Eulid(b, a % b, y, x, d);
     7         y -= x * (a / b);
     8     }
     9 }
    10 int main(){
    11     LL a, b, d, x, y;
    12     while(~scanf("%lld%lld", &a, &b)){
    13         extend_Eulid(a, b, x, y, d);
    14         printf("%lld*a + %lld*b = %lld
    ", x, y, d);
    15     }
    16 }

    有些人喜欢极度简化,这是病,得治(,,• ₃ •,,)比如在下

    1 void ex_gcd(LL a, LL b, LL &d, LL &x, LL &y){
    2     if(!b){d = a; x = 1; y = 0;}
    3     else{ex_gcd(b, a%b, d, y, x); y -= x*(a/b);}
    4 } 

    连名字都简化了。。。

    ( •̀∀•́ )解完了

    睡觉~~~

  • 相关阅读:
    搜狗五笔快捷键
    [原抄] Potplayer 1.7.2710 快捷键
    权限设置并未向在应用程序容器 不可用
    fork( )函数(转载)
    软件开发中的迭代(转载)
    进程间通信的方式(转载)
    P NP NPC(1)(转载)
    P NP NPC(2)(转载)
    大小端字节序
    求n对括号的排列组合(卡特兰数)
  • 原文地址:https://www.cnblogs.com/linyujun/p/5167916.html
Copyright © 2011-2022 走看看