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 } 

    连名字都简化了。。。

    ( •̀∀•́ )解完了

    睡觉~~~

  • 相关阅读:
    x-ua-compatible的实践
    在iframe中使用cookie需要注意
    border在IE6设置transparent无效
    开发过程中的一点领悟(2)
    mouseover和mouseout、mouseenter和mouseleave
    scrollWidth的巧妙运用
    后一个div无法遮挡住前一个有img的div
    ie6并不是不支持!important
    window.parent
    (转)nmake学习笔记
  • 原文地址:https://www.cnblogs.com/linyujun/p/5167916.html
Copyright © 2011-2022 走看看