# very strange mod operation overflow. Pls help

int ans,sum;

the variable sum is generated everytime(it is the sum of values in each column of the 2d array, and ans is the product of all the sums) and is basically small value, I am getting AC for the following codes :

ans=( (ans%mod) * (sum) ) %mod ;

ans=( (ans) * (sum%mod) ) %mod ;

ans=(ans*sum)%mod;

question

solution

pls someone help me with this

It’s probably just as you say: `ans*sum` is simply too big to store, so it overflows. This can happen even if `ans` and `sum` are small enough to be `int`s because `int` multiplication yields `int`, even if it should yield a `long long`. Here’s an example of this:

``````
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main() {
long long m = (long long)pow(2, 31), m2 = m+1;
int n = (int)pow(2, 31), n2 = n+1;
printf("%lli %lli", n*n2, m*m2);
exit(0);
}

``````

This first product of `int`s should yield an incorrect product from overflow while the product of `long long`s yields the right answer even though in `printf()`, we asked for `long long`s from both products.

This is probably what happened in this problem: `ans` and `sum` were small enough to be regular `int`s, but too big to multiply together into an `int`. To stop this from happening, keep taking the `% mod` of one or both of the multiplicands before multiplying big `int`s together.

1 Like

I am able to understand what you are trying to tell, so now one more question… where is the result of n*n2 stored?? what is the data type in which it is stored??

please explain, I am able to understand what you are trying to tell, so now one more question… where is the result of n*n2 stored?? what is the data type in which it is stored??

Because `n*n2` is a product of `int`s, and it is stored somewhere as an `int`. I don’t know where exactly it is stored, but I would guess that the compiler would store it as an `int` somewhere temporarily.