# ARRIL LUNCH TIME ARRAY ROTATION

why are we doing
for(int i = 0 ; i< n , i++){
int x ; cin >> x ;
sum =(sum+x + mod) % mod //mod is 10e9 + 7
}
and then again taking modulo at each queries, i understand that for each query we need to do that but why for the initial sum ?

The initial sum can be as large as 10^{14}. So, taking modulo is not necessary for the initial sum, but as a good practice people do it - it reduces the computational time a bit since the numbers do not exceed 10^{9} + 7.

but i am getting WA if i dont take modulo in the initial sum

That could be because the sum can be as small as -10^{14} (it is negative). So, this statement doesn’t work.

``````mod = 1e9 + 7;
sum = -100000000000000; // -1e14
sum %= mod; // Line 3
// sum will be negative

sum = (sum % mod + mod) % mod;
``````

This is the correct way I guess.

Edit: Sum will not be negative at line 3. Seems there is some other reason for WA.

@ssjgz may help.

Edit 2: I am unable to understand its behaviour.

C Code
``````#include <stdio.h>
typedef long long int ll;
int main() {
ll sum = -(1e14);
ll mod = (1e9 + 7);
printf("%lld %lld\n", sum, mod);
printf("%lld\n", sum % mod);
return 0;
}
``````

Output

``````-100000000000000 1000000007
-999300007
``````
Python Code
``````s = -(10**14)
mod = 10**9 + 7
print(s % mod)
``````

Output

``````700000
``````
1 Like

i am also not being able to understand why it is so You can try these modulo operators