modulo - How to use a very long integer to compute a value in C++? -
i need compute (n*(2n+1)*(n+1)*(3(n^2)+3n+1))/30 modulo m where: - 30 & m can non co-prime - n can have values 10^10 (too big long long int) - m can have value 10000
i have tried this:
long long int tp1; double k; k=n; k=k*((2*n)+1); k=k*(n+1); k=k*((3*n*n)+(3*n)-1); tp1=fmod(k/30,m); 
as noted molbdnilo, can calculations modulo number.
to expand idea:
- (x * y) mod msame- ((x mod m) * (y mod m)) mod m
- (x + y) mod msame- ((x mod m) + (y mod m)) mod m
however
- (x / y) mod mnot same- ((x mod m) / (y mod m)) mod m
therefore, have calculate n*(2n+1)*(n+1)*(3(n^2)+3n+1) mod (30 * m), , divide 30.
p.s. assumed division operation means same in c++, "divide rounding down".
Comments
Post a Comment