In the line
result = mymod((result * x),d);
in result * x
your both result
and x
can be as large as d
(more precisely, d-1
), so you need a data type that can hold integers as big as d*d
. For your cases, this may be long long int
.
Another approach will be not to use library operator*
for int
s, but implement a manual multiplication function with a similar divide and conquer approach using only additions. This way you will need a data type that can hold integers as big as 2d
only.
Also note that you do not need to call mymod
each time in the main loop. You can call it only once before the loop to make x
positive (x=mymod(x,d)
), and then use just the operator%
.