Given a number N, print N!.
First line of input contains T - number of test cases. Its followed by T lines, each containing a single number N.
1 <= T <= 1000000
0 <= N <= 1000000
For each test case, print N!. Since the result can be very large, print N! % 1e9+7.
So i tried using BigInteger in java . But on doing that it is giving tle verdict.
Another approach which comes in my mind is precalculate all factorials upto 10^6.
But i’m not sure whether it works or not and also i don’t know how to work with BigInteger arrays.
Can anyone help me ? @everule1 @waqar_ahmad224
the link you have provided is broken I guess.
I am getting a 404 Not found Error
It’s from smartinterview hackerrank contest.I don’t know why its giving 404 error.
Is it a live contest problem?
well its open for unlimited amount of time
If it’s againast the rules.No problem ill delete this post.
I thought as its similar to our dsa contest in codechef we can ask help.
then I can explain.
since we have to print result modulo 10^9+7 , you don’t need bigInteger.
Just precalculate factorial from 1 to 10^6 in an array say fact[ ] and for each query n , print fact[n]
it would go something like this
fact = 1;
fact[i] = (fact[i-1] * i) % mod
you will pre-calculate only once and each query can be answered in O(1) time
Thanks a lot @waqar_ahmad224.
Had to use fastio with precomputation.
Bytheway i love your youtube videos.
Whenever you have large numbers, remember the following.
Fundamental operations give same answer with both pre and post modulation.
(a+b)% mod = (a%mod + b%mod)%mod;
(a*b)%mod = (a%mod * b%mod)%mod;
You get the idea.
By doing modulation at every position, we prevent overflow of the number.
a%mod & b%mod are not necessary, that has to be done based on your requirements.
you’re welcome @lost_boy12 , and good luck for your next challenge