如何在没有整数溢出的情况下找到 n%(k*k)?
How to find n%(k*k) without integer overflow?
我知道 (a*b)%m
等于 ((a%m)*(b%m))%m
?
但是a%(m*m)
怎么计算呢?
我们需要在不引起整数溢出的情况下计算a%(m*m)
。
long long int a, m, sqrt_a, ans;
sqrt_a = sqrt(a);
if (sqrt_a < m) {
ans = a; // since "m > sqrt_a" then a%(m*m) will be "a"
}
else {
ans = a % (m*m); // since "m <= sqrt_a" then m*m won't cause overflow
}
我知道 (a*b)%m
等于 ((a%m)*(b%m))%m
?
但是a%(m*m)
怎么计算呢?
我们需要在不引起整数溢出的情况下计算a%(m*m)
。
long long int a, m, sqrt_a, ans;
sqrt_a = sqrt(a);
if (sqrt_a < m) {
ans = a; // since "m > sqrt_a" then a%(m*m) will be "a"
}
else {
ans = a % (m*m); // since "m <= sqrt_a" then m*m won't cause overflow
}