Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模数为10^9+的从0到10^18的数字之和;7._C++_Algorithm_Overflow_Modular Arithmetic - Fatal编程技术网

C++ 模数为10^9+的从0到10^18的数字之和;7.

C++ 模数为10^9+的从0到10^18的数字之和;7.,c++,algorithm,overflow,modular-arithmetic,C++,Algorithm,Overflow,Modular Arithmetic,如何求从0到n的数之和模数109+7,其中n≤ 1018 我只想将结果存储在long int中,而不是数组或字符串中。 我的代码导致运行时错误 const unsigned int m = 1000000007; long long int n; cin >> n; long long int s = 0; for (long long int i = 0; i < n; i++) { s = ((s % m) + (i % m)) % m; } cout <&

如何求从0到n的数之和模数109+7,其中n≤ 1018

我只想将结果存储在long int中,而不是数组或字符串中。 我的代码导致运行时错误

const unsigned int m = 1000000007;

long long int n;
cin >> n;
long long int s = 0;
for (long long int i = 0; i < n; i++) {
    s = ((s % m) + (i % m)) % m;
}
cout << s << endl;
const unsigned int m=100000007;
长整型n;
cin>>n;
长整型s=0;
for(长整型i=0;in*(n+1)/2
给出。因此,不需要迭代n来计算和

因为,n可能高达1018,使用,
(n*(n+1)/2)%MOD计算总和将导致整数溢出。相反,应使用模运算属性
(a*b)%MOD
((a%MOD)*(b%MOD))%MOD
一致来计算和

因此,可使用以下公式计算总和:
((n%MOD*(n+1)%MOD)%MOD)/2

代码看起来像这样

const long long int MOD = 1e9 + 7;
long long int n;

cin >> n;

long long s
s = ((n % MOD * (n + 1) % MOD) % MOD) / 2;

cout << s << '\n';
const long int MOD=1e9+7;
长整型n;
cin>>n;
长长的
s=((n%MOD*(n+1)%MOD)%MOD)/2;
库特