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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP to find the value of f(n)/f(r)*f(n-r)
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP to find the value of f(n)/f(r)*f(n-r)
  
// Function to find value of given F(n)
function calcFunction($n, $r)
{
    $finalDenominator = 1;
    $mx = max($r, $n - $r);
  
    // iterate over n
    for ($i = $mx + 1; $i <= $n; $i++) 
    {
  
        // calculate result
        $denominator = pow($i, $i);
        $numerator = pow($i - $mx, $i - $mx);
        $finalDenominator = ($finalDenominator *
                             $denominator) / 
                             $numerator;
    }
  
    // return the result
    return $finalDenominator;
}
  
// Driver code
$n = 6; $r = 2;
echo "1/" , calcFunction($n, $r);
  
// This code is contributed by anuj_67..
?>

chevron_right


Output:

1/36450000


My Personal Notes arrow_drop_up

Discovering ways to develop a plane for soaring career goals

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.