G18 同余方程 乘法逆元 扩展欧几里得算法

G18 同余方程 乘法逆元 扩展欧几里得算法_哔哩哔哩_bilibili

 

P1082 [NOIP 2012 提高组] 同余方程 - 洛谷

#include<bits/stdc++.h>
using namespace std;

int a,b,x,y;

int exgcd(int a,int b,int &x,int &y){
  if(b==0){x=1,y=0; return a;}
  int x1,y1;
  int d=exgcd(b,a%b,x1,y1);
  x=y1,y=x1-a/b*y1;
  return d;
}
int main(){
  cin>>a>>b;
  exgcd(a,b,x,y);
  cout<<(x%b+b)%b;
  return 0;
}

 

#include<bits/stdc++.h>
using namespace std;

int a,b,x,y;

int exgcd(int a,int b,int &x,int &y){
  if(b==0){x=1,y=0; return a;}
  int d=exgcd(b,a%b,y,x);
  y=y-a/b*x;
  return d;
}
int main(){
  cin>>a>>b;
  exgcd(a,b,x,y);
  cout<<(x%b+b)%b;
  return 0;
}

 

U553464 扩展欧几里得 - 洛谷

CF7C Line - 洛谷

P1516 青蛙的约会 - 洛谷

 

P3951 [NOIP 2017 提高组] 小凯的疑惑 - 洛谷

设 a<b,答案为 x
若 x≡ma(mod b) (1≤m≤b−1)
即 x=ma+nb (1≤m≤b−1)

当 n≥0 时,x 可以用 a,b 表示出来,不合题意。

因此当 n=−1 时 x 取得最大值,此时 x=ma−b。
显然当 m 取得最大值 b−1 时,x 最大,
此时 x=(b−1)a−b=ab−a−b。

// 数学 同余
#include<iostream>
using namespace std;

int main(){
  long long a,b;
  cin>>a>>b;
  cout<<a*b-a-b<<endl;
  return 0;
}

 

posted @ 2022-09-27 10:47  董晓  阅读(952)  评论(0)    收藏  举报