# Find the value of f(n) / f(r) * f(n-r)

Given two positive integers n and r where n > r >1. The task is to find the value of f(n)/(f(r)*f(n-r)). F(n) is deined as follows:

1-1 *2-2 *3-3 *….. n-n

Examples:

```Input: n = 5, r = 3
Output: 1/200000

Input: n = 3, r = 2
Output: 1/27
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A naive approach to solve this question is to calculate f(n), f(r) and f(n-r) separately and then calculating the result as per given formula but that will cost a bit high of time complexity.

A better approach to solve this question is to find the greater value among r and n-r and then after using the property f(n) = f(n-1)* n-n = f(n-1)/nn of given function, eliminate the greater among f(r) and f(n-r) from numerator and denominator. After that calculate the rest of value by using simple loop and power function.

Algorithm:

find max(r, n-r).
iterate from max(r, n-r) to n
result = ((result * i-i / (i-max(r, n-r)) -(i-max(r, n-r)) )

Below is the implementation of the above approach:

## C++

 `// CPP to find the value of f(n)/f(r)*f(n-r) ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find value of given F(n) ` `int` `calcFunction(``int` `n, ``int` `r) ` `{ ` `    ``int` `finalDenominator = 1; ` `    ``int` `mx = max(r, n - r); ` ` `  `    ``// iterate over n ` `    ``for` `(``int` `i = mx + 1; i <= n; i++) { ` ` `  `        ``// calculate result ` `        ``int` `denominator = (``int``)``pow``(i, i); ` `        ``int` `numerator = (``int``)``pow``(i - mx, i - mx); ` `        ``finalDenominator = (finalDenominator ` `                            ``* denominator) ` `                           ``/ numerator; ` `    ``} ` ` `  `    ``// return the result ` `    ``return` `finalDenominator; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `n = 6, r = 2; ` `    ``cout << ``"1/"` `<< calcFunction(n, r) << endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find the value of f(n)/f(r)*f(n-r)   ` ` `  `class` `GFG { ` `// Function to find value of given F(n)  ` ` `  `    ``static` `int` `calcFunction(``int` `n, ``int` `r) { ` `        ``int` `finalDenominator = ``1``; ` `        ``int` `mx = Math.max(r, n - r); ` ` `  `        ``// iterate over n  ` `        ``for` `(``int` `i = mx + ``1``; i <= n; i++) { ` ` `  `            ``// calculate result  ` `            ``int` `denominator = (``int``) Math.pow(i, i); ` `            ``int` `numerator = (``int``) Math.pow(i - mx, i - mx); ` `            ``finalDenominator = (finalDenominator ` `                    ``* denominator) ` `                    ``/ numerator; ` `        ``} ` ` `  `        ``// return the result  ` `        ``return` `finalDenominator; ` `    ``} ` ` `  `// Driver code  ` `    ``public` `static` `void` `main(String[] args) { ` `        ``int` `n = ``6``, r = ``2``; ` `        ``System.out.println(``"1/"` `+ calcFunction(n, r)); ` ` `  `    ``} ` `} ` `// This code is contributed by RAJPUT-JI `

## Python 3

 `# Python3 to find the value of f(n)/f(r)*f(n-r) ` ` `  `# Function to find value of given F(n) ` `def` `calcFunction(n, r): ` ` `  `    ``finalDenominator ``=` `1` `    ``mx ``=` `max``(r, n ``-` `r) ` ` `  `    ``# iterate over n ` `    ``for` `i ``in` `range``(mx ``+` `1``, n ``+` `1``):  ` ` `  `        ``# calculate result ` `        ``denominator ``=` `pow``(i, i) ` `        ``numerator ``=` `pow``(i ``-` `mx, i ``-` `mx) ` `        ``finalDenominator ``=` `(finalDenominator ``*`  `                            ``denominator) ``/``/` `numerator ` ` `  `    ``# return the result ` `    ``return` `finalDenominator ` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `     `  `    ``n ``=` `6` `    ``r ``=` `2` `    ``print``(``"1/"``, end ``=` `"")  ` `    ``print``(calcFunction(n, r)) ` ` `  `# This code is contributed by ita_c `

## C#

 `// C# program to find the value of f(n)/f(r)*f(n-r)  ` `using` `System; ` ` `  `public` `class` `GFG { ` `// Function to find value of given F(n)  ` ` `  `    ``static` `int` `calcFunction(``int` `n, ``int` `r) { ` `        ``int` `finalDenominator = 1; ` `        ``int` `mx = Math.Max(r, n - r); ` ` `  `        ``// iterate over n  ` `        ``for` `(``int` `i = mx + 1; i <= n; i++) { ` ` `  `            ``// calculate result  ` `            ``int` `denominator = (``int``) Math.Pow(i, i); ` `            ``int` `numerator = (``int``) Math.Pow(i - mx, i - mx); ` `            ``finalDenominator = (finalDenominator ` `                    ``* denominator) ` `                    ``/ numerator; ` `        ``} ` ` `  `        ``// return the result  ` `        ``return` `finalDenominator; ` `    ``} ` ` `  `// Driver code  ` `   ``public` `static` `void` `Main() { ` `        ``int` `n = 6, r = 2; ` `        ``Console.WriteLine(``"1/"` `+ calcFunction(n, r)); ` ` `  `    ``} ` `} ` `// This code is contributed by RAJPUT-JI `

## PHP

 ` `

Output:

```1/36450000
``` My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.