All about Factorial(!)

In mathematics,the factorial of any positive number N is the product of the positive integers less than or equal to N.It is denoted by ‘N!’.

Example-

5!= 5*4*3*2*1 =120
Also,0!=1.

In C/C++,no data type can store the value of factorial of a number greater than 20.To find the factorial of greater numbers easily,JAVA/Python can be used.

JAVA Code-

This code uses BigIntegers.

[cpp]
import java.io.*;
import java.math.BigInteger;
public class Main
{
public static void main(String[] args) throws IOException
{
String n;
BufferedReader d= new BufferedReader(new InputStreamReader(System.in));
n=d.readLine();
int y=Integer.parseInt(n);
BigInteger x=new BigInteger(n); //converting string to biginteger
for(int j=y-1;j>=1;j–)
{
String str= Integer.toString(j);
x=x.multiply(new BigInteger(str));
}
System.out.println(x);
}
}
[/cpp]

Length of the factorial-

The number of digits in N! is approximately:-
[(log(2*pie*n)/2)+n*(log(n)-1))/log(10)]+1;

Stirling’s approximation-

N! is approximately equal to {sqrt(2*pie*n)}*{(n/e)^n}.

To find the power of a prime factor of N! –

Let the prime factor be X.Then,the power of X will be :-

[N/X]+[N/(X^2)]+[N/(X^3)]+….. where [.] denotes the greatest integer function.

For example-

Power of 2 in 5! will be-

[5/2]+[5/4]+[5/8]+[5/16]+…..
=> 2+1+0+0+….
which is equal to 3.

Also,5!=2^3 * 3^1 * 5^1

To find the number of zeroes at the end of N!-

Find the power of 2 and 5 in N!(Since,10=5*2).
Let it be ‘v’ and ‘s’ respectively.
if(v<=s),then number of zeroes at the end is 'v',else,'s'.

Code-

[cpp]
//initialization
s=0;
v=0;

p=N; //copying value of N to another variable
//Finding power of 5
while(N>0)
{
q=N/5;
s=s+q;
N=q;
}
//Finding power of 2
while(p>0)
{
w=p/2;
v=v+w;
p=w;
}

if(v>=s) printf("%d\n",s);
else printf("%d\n",v);
}
[/cpp]

Last Non-zero digit of the factorial-

Lets say D(N) denotes the last non zero digit of factorial, then the algo says:-
If tens digit of N is odd,D(N)=4*D[N/5]*D(Unit digit of N)
If tens digit of N is even,D(N)=6*D[N/5]*D(Unit digit of N)
where [N/5] is greatest Integer Function.

Example-

D(26)=6*D[26/5]*D(6)=6*D(5)*D(6)=6*2*2=4
[D(5) means last non zero digit of 5!=120 which is 2, same for D(6)]

Leave a Comment

Your email address will not be published. Required fields are marked *