here is my program so far for calculating factorials, combinations, and permutations. Can someone show me an algorithm or pseudocode to calculate the calcPNR(permuation) function please?Code:#include <stdio.h> #include "Boolean.h" #include "combinatorics.h" #include <limits.h> /* For all the functions below, return TRUE if the calculation is successful, FALSE if overflow occurs Return the calculated value in the pass by reference parameter provided */ Boolean calcFactorial (int n, int* nfact) { *nfact = 1; while(n > 0) { *nfact = *nfact * n; n--; } if(*nfact < 0x7fffffff) { return TRUE; } else { return FALSE; } } /* Combination means C(n,r) = n!/( r! * (n-r)! ) where C(n,r) is the number of r-element subsets of an n-element set. Better formula derived from above is: n ( n-1 ) ( n-2 ) ... ( n-r+1 ) C(n,r) = ------------------------------- r ( r-1 ) ( r-2 ) ... (3)(2)(1) Return True if calculation is successful. False if Overflow occurs. */ Boolean calcCNR( int n, int r, int* cnr ) { #define min(n,r) (((n) < (r)) ? (n) : (r)); int multiplier = n; int divisor = 1; int k; INT_MAX; k = min(r, n - r); //printf("n=%d, r=%d, k=%d\n", n, r, k); *cnr = 1; while (divisor <= k) { if(INT_MAX / multiplier < *cnr) { printf("Overflow detected\n"); return FALSE; } else { *cnr = ((*cnr * multiplier) / divisor); //printf("Intermediate *cnr=%d\n", *cnr); multiplier--; divisor++; } } return TRUE; } Boolean calcPNR( int cnr, int rfact, int* pnr ) { }