最大公约数和同余原理

最大公约数和同余原理

1)辗转相除法求最大公约数:
本质上利用递归思想,设有两个数 a 和 b (a > b),求a 与 b 的最大公约数可以先进行 a % b = res1,res1 一定小于b, 这时让 a = b, b = res1;再次让 a % b = res2, a = b; b = res2; 直到 b== 0 时,a的值就是这两个数的最大公约数
并且求出最大公约数后可以根据公式求出最小公倍数 a * b / gcd(a,b) = lcm(a,b)
1.1)代码实现:

#include<iostream>
using namespace std;

int gcd(int a,int b){
    return b == 0 ? a : gcd(b,a%b);
}

//先除是为了防止溢出
int lcm(int a,int b){
    return a / gcd(a,b) * b;
}

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

2)同余原理:
加法与乘法:
(a+b+c+d) % mod = (a%mod + b%mod + c%mod +d%mod)%mod;
(a+b+c+d)%mod = (((a%mod + b)%mod + c)%mod + d)%mod;

(a* b * c * d) % mod = (a%mod * b%mod * c%mod * d%mod)%mod;
(a * b * c * d)%mod = (((a%mod * b)% mod * c)%mod *d)%mod;
减法:
(a-b)%mod = (a - b + mod) % mod;

posted on 2026-04-23 18:11  Sean2299  阅读(16)  评论(0)    收藏  举报

导航