[英]How to use modulo 10^9+7
我正在尝试编写自然数平方和的代码,但是使用 mod 它给出了错误的答案。 这里的正确方法是什么?
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
int main()
{
int N;
cin>>N;
cout<< (((N) * (N+1) * (2*N+1))/6)%mod;
return 0;
}
(N) * (N+1) * (2*N+1)
可能,即使N
小于 1000000007,也可能太大。 即高达2000000039000000253000000546,这是一个91位的数字。 您系统上的int
不太可能包含如此大的数字。
与此类问题一样,解决方法是:
仅使用其中之一是不够的。
由于之前应用了模减少,除以 6 将不适用于正常除法,它必须是乘以 6 mod 1000000007 的模乘逆,即 166666668。
示例代码:
mod_mul(mod_mul(mod_mul(N, N + 1, mod), mod_mul(2, N, mod) + 1, mod), inv6, mod)
使用一些合适的mod_mul
定义,可以通过使用long long
或类似类型来避免溢出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.