我有一个简单的问题,如何使此函数返回mod 1000000007值?我正在尝试实现((k+n)*n/k+n)%MOD,同时避免中间溢出。

long long func(long long n,int k){
    return ((k+n)*n)/k+n;
}


根据这3个公式:(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));
}

这似乎是不正确的。

最佳答案

模数组中的“除法”与常规除法有很大不同,因此您不能仅在C / C++中使用/%;您需要一种算法来找到乘法逆。参见https://cs.stackexchange.com/questions/10552/division-modulo-a-prime-in-modular-arithmetic

关于c++ - MOD 1000000007似乎不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58719322/

10-13 09:02