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; }
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; }
浙公网安备 33010602011771号