zoukankan      html  css  js  c++  java
  • 扩展欧几里德

    例题 双六游戏

    一个双六上面有向前 向后无限延续的格子, 每个格子都写有整数。其中0号格子是起点,1号格子
    是终点。而骰子上只有a,b,-a,-b四个整数,所以根据a和b的值的不同,有可能无法到达终点
    掷出四个整数各多少次可以到达终点呢?如果解不唯一,输出任意一组即可。如果无解 输出impossible!

    可将此题转化成ax+by=1的形式

    我们使用和辗转相除法相似的思路,将extgcd(a,b,x,y)不断递归为extgcd(b,a%b,x,y),但同时我们要响应得更改x和y,即将x转化为上一次地规避的y,y转化为上一次递归的x-(a/b)*y。

    具体证明请自行百度

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    int gcd(int a,int b)
    {     if(a<b)swap(a,b);
          if(a%b==0)return b;
          return gcd(b,a%b);
    }
    void exgcd(int a,int b,int& x,int& y)
    {     if(b==0){
             x=1;
             y=0;
             return;
          }
          exgcd(b,a%b,x,y);
          int z=x;
          x=y;
          y=z-(a/b)*y;
    }
    int main()
    {     int a,b,x,y,i,j,k;
          cin>>a>>b;
          if(gcd(a,b)!=1)puts("impossible!");
          exgcd(a,b,x,y);
          cout<<x<<' '<<y<<endl;
          return 0;
    }

  • 相关阅读:
    【唯星宠物】——CSS/BootStrap/Jquery爬坑之响应式首页
    【可用性评估】——手机输入法可用性评估·论文
    一个简单示例看懂.Net 并行编程
    CentOS 7.1上安装.Net Core
    用 QGIS 画矢量交通路线图
    工作流服务实战
    JVM调优总结
    内存调优
    ConcurrentHashMap原理分析
    Mac上安装go环境
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/8325499.html
Copyright © 2011-2022 走看看