I need to calculate the factorial of a big number (<=1.000.000) and I need the result modulo 1000000007. I wrote the following but it generates an error when run (test.exe has stopped working). It works only for small numbers.
long long unsigned modulo(long long unsigned nr){
return nr % 1000000007;
}
long long unsigned fact(long long unsigned nr){
if(nr)return modulo(nr * fact(nr - 1));
else return 1;
}
UPDATE 1:
long long unsigned fact(long long unsigned nr){
long long unsigned r = nr;
while(--nr){
r = modulo(r * nr);
}
return r;
}