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,防止出现负数