1.最大公因数
int gcd(int a,int b)
{
return b==0 ? a : gcd(b,a%b);
}
int main()
{
int x,y;
cin>>x>>y;
cout<<gcd(x,y);
return 0;
}
每一次调用gcd传进去的两个值,若b为零则输出a,否则再次调用gcd,传入b,a%b
2.最小公倍数
int lcm(int a,int b)
{
return a/gcd(a,b)*b;
}
a*b,再除以最大公因数
3.同余原理
当所求答案位数很大时,题目往往会要求取模。但不能在算出一个很大的数最后再取模,因为在前面的过程中可能已经有很大的数,此时相加时间复杂度会变得很高,因此需在每一步都取模。
(1)加法同余
( a + b )% m = a % m + b % m // 每加一步 取一次模
(2)乘法同余
long long a , b , c , m ; // 防止溢出
( a * b * c )% m = a % m * b % m * c % m // 每乘一步 取一次模
(3)减法同余
( a - b )% m = ( a % m - b % m + m ) % m // 最后加上m,防止出现负数