zoukankan      html  css  js  c++  java
  • 【数论】拓展欧几里得

    今天开始看orz数论了 数论一直是我最弱的一项 (一学数论就想睡觉啊啊TAT .zZ)从初三到现在每年都有学 每年都忘 于是乎做一个总结 希望能掌握神奇的数论

     

    去年noip就考了拓展欧几里得的模板题 因为不会 送了100分- -

    拓展欧几里得说简单了其实就是 给出方程ax+by=gcd(a,b) 求解(x,y)

    有学过快速求gcd的都知道 gcd(a,b)=gcd(b,a%b) 我们可以用这个性质求解

    假设已经知道bx+(a%b)y=gcd(b,a%b)的解(x,y) 

    bx+(a%b)y=gcd(b,a%b)

    ->bx+(a%b)y=gcd(a,b)

    ->bx+(a-a/b*b)y=gcd(a,b)

    ->ay+b(x-a/b*y)=gcd(a,b)

    于是可以得到新的x'=y,y'=(x-a/b*y)

    递归求解即可

    代码:

     1 int extgcd(int a,int b,int &x,int &y){
     2     if (!b){
     3         x=1,y=0;
     4         return a;
     5     }else{
     6         int res=extgcd(b,a%b,x,y);
     7         int t=x;
     8         x=y,y=t-a/b*y;
     9         return res;
    10     }
    11 }
  • 相关阅读:
    Hibernate 查询语句
    application 网站计数器
    Hibernate 配置
    常用正则表达式
    字符串的系列操作
    输入内容验证
    大小写字母验证
    验证非零的正整数
    验证数字输入
    Java面向对象之多态
  • 原文地址:https://www.cnblogs.com/g-word/p/3372069.html
Copyright © 2011-2022 走看看