我有一个简单的问题,如何使该函数返回mod 1000000007值?我正在尝试实现((k+n)*n/k+n)%MOD
的同时避免中间溢出。
long long func(long long n,int k){
return ((k+n)*n)/k+n;
}
根据以下三个公式:(a+b)%c=((a%c)+(b%c))%c
和(a-b)%c=((a%c)-(b%c))%c
和(a*b)%c=((a%c)*(b%c))%c
,我这样写:
long long func(long long n,int k){
return (((((((k%MOD)+(n%MOD))%MOD)*(n%MOD)))/k)%MOD+(n%MOD));
}
似乎不正确。
答案 0 :(得分:2)
模群中的“除法”与普通除法有很大不同,因此,您不能只在C / C ++中使用/
和%
。您需要一种算法来找到乘法逆。参见https://cs.stackexchange.com/questions/10552/division-modulo-a-prime-in-modular-arithmetic