zoukankan      html  css  js  c++  java
  • hoj2185 Min Chain

    分析:

       扩展的欧几里德算法,ax+by=gcd(a,b),若gcd(a,b)!=1,输出-1,否则,用扩展的欧几里德算法求出

       最小的x与y即可,注意到

       当存在0时,若有1输出1,否则输出-1;

       当存在1,若有2输出1,否则输出2(因为直接a-a+1即可)

       当上面都不满足时,直接用扩展的欧几里德算法求出x,在解方程求出y,两绝对值相加减一即可

     

    #include <cmath>

    #include <iostream>

    using namespace std;

    long long ex_gcd(long long a,long long b,long long &x,long long &y)

    {

       if(!b)

       {

          x = 1;

          y = 0;

          return a;

       }

       long long r = ex_gcd(b,a%b,x,y);

       long long t = x;

       x = y;

       y = t-a/b*y;

       return r;

    }

    int main()

    {

       freopen("sum.in","r",stdin);

       freopen("sum.out","w",stdout);

       int t;

       cin>>t;

       long long a,b,c = 1,r,k1,k2,d;

       while(t--)

       {

          cin>>a>>b;

          if(b>a)

             swap(a,b);

          if(!b)

          {

             if(a==1)

                cout<<1<<endl;

             else

                cout<<-1<<endl;

          }

          else if(a==2&&b==1)

             cout<<1<<endl;

          else if(b==1)

             cout<<2<<endl;

          else

          {

             r = ex_gcd(a,b,k1,k2);

             if(r!=1)

                cout<<-1<<endl;

             else

             {

                d = k1*c/b;

                k1 = c*k1-d*b;  //求出x

                k2 = (1-a*k1)/b;//求出y

                long long ans = abs(k1)+abs(k2);

                cout<<ans-1<<endl;

             }

          }

       }

       return 0;

    }

  • 相关阅读:
    activiti07- Task
    Activiti-06-.事件
    Activiti-05-.Deployment and MN 2.0 Introduction
    Spring-Hibernate-web的延迟加载方案
    Spring-Struts2-基本集成
    Spring-hibernate-BaseDao
    Spring-hibernate
    Spring-java-模板设计模式
    搭建apache,指定MPM模式为worker(不许用yum安装)
    apache + tomcat负载均衡搭建
  • 原文地址:https://www.cnblogs.com/yejinru/p/2403024.html
Copyright © 2011-2022 走看看