zoukankan      html  css  js  c++  java
  • NOIP2012拓展欧几里得

    拉板题,,,不说话

    我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了

    先来一发欧几里得拓展裸

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

    代码又短又好懂,所以就解释了

    可以看出gcd中所有关于xy的东西删光就变成了朴素的球最大公约数的gcd——其实本程序中的欧几里得是拓展欧几里得,所以应该叫exgcd而不是gcd,但是不需要求gcd所以就偷个懒好了

    然后通过数学推导就能发现每一次辗转相除对应的x y的变化规律

    然后就没有然后了

    ——虽然听晕了,但是能15行解决题目的感觉真爽

  • 相关阅读:
    ccc pool
    ccc 模拟重力 正太分布
    ccc 正态分布
    ccc this 指针
    基本语法HelloWorld
    css选择器
    css基本语法
    表单
    表格
    超链接
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5681654.html
Copyright © 2011-2022 走看看