求ab mod n
因为a mod n × b mod n可能超过int 所以用long long 保存中间值
// ab mod n
int mul_mod(int a, int b, int n) {
a %= n, b %= n;
return (int)((long long)a * b % n);
}
大整数取模
输入正整数 n 和 m ,输出 n mod m 的值
// n mod m
scanf("%s%d", n, &m);
int len = strlen(n);
int ans = 0;
for (int i = 0; i < len; i++)
ans = (int)(((long long)ans * 10 + n[i] - '0') % 10);
printf("%d\n", ans);
幂取模
输入正整数 a 、n 和 m ,输出 a ^ n mod m 的值
//a ^ n mod m
//分治法
int pow_mod(int a, int n, int m) {
if (n == 0) return 1;
int x = pow_mod(a, n / 2, m);
long long ans = (long long)x * x % m;
if (n % 2 == 1)ans = ans * a % m;
return (int)ans;
}