c++ - MOD 1000000007 好像不对

标签 c++ mod

我有一个简单的问题,如何让这个函数返回 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/

相关文章:

c++ - 保留模距离的符号

c++ - 射线平面求交方向 vector

c++ - 将 GetLastError() 变成异常

c++ - 错误 : expected unqualified-id before '{' token

algorithm - 计算 1^X + 2^X + ... + N^X mod 1000000007

vba - 带有 float 的 Mod 给出错误的结果

c - c 中的快速模 10

java - 如何使用不断递增的整数来检测是否经过了设定的间隔

c++ - qmake运行时如何将变量传递给qmake项目文件

c++ - 右值需要分配哪些向后兼容性?