【OI-1】NOIP2012 Day2T1 同余方程

【问题描述】求关于x的同余方程ax≡1(mod b)的最小正整数解。(对于100%的数据,2≤a,b≤2,000,000,000)

【算法分析】此题若使用暴搜会导致4个点TLE,事实上此题可直接用扩展欧几里得算法解决,算法详见与初等数论有关书籍。

【C++代码】

  #include<cstdio>
  using namespace std;
  int a,b,d,m,n;
  void ExtendedGCD(int a,int b,int &d,int &m,int &n)
  {
      if (b==0) {d=a; m=1; n=0;}
      else {ExtendedGCD(b,a%b,d,n,m); n-=m*(a/b);}
  }
  int main()
  {
      scanf("%d%d",&a,&b);
      ExtendedGCD(a,b,d,m,n);
      while (m<=0||n>=0) {m+=b/d;n-=a/d;}
      printf("%d",m);
      return 0;
  }

你可能感兴趣的:(【OI-1】NOIP2012 Day2T1 同余方程)