Encuentra el valor de f(n) / f(r) * f(nr)

Dados dos enteros positivos n y r donde n > r >1. La tarea es encontrar el valor de f(n)/(f(r)*f(nr)). F(n) se define como sigue: 
 

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

Ejemplos: 
 

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

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

Un enfoque ingenuo para resolver esta pregunta es calcular f (n), f (r) y f (nr) por separado y luego calcular el resultado según la fórmula dada, pero eso costará un poco de complejidad de tiempo. 
Un mejor enfoque para resolver esta pregunta es encontrar el mayor valor entre r y nr y luego, después de usar la propiedad f(n) = f(n-1)* n -n = f(n-1)/n n de dado función, elimine el mayor entre f(r) y f(nr) del numerador y el denominador. Después de eso, calcule el resto del valor usando el bucle simple y la función de potencia .
Algoritmo: 
 

encontrar max(r, nr). 
iterar de max(r, nr) a n 
resultado = ((resultado * i -i / (i-max(r, nr)) -(i-max(r, nr)) )

A continuación se muestra la implementación del enfoque anterior: 
 

C++

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

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

<?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..
?>

Javascript

<script>
 
// Javascript to find the value of f(n)/f(r)*f(n-r)
 
// Function to find value of given F(n)
function calcFunction(n, r)
{
    var finalDenominator = 1;
    var mx = Math.max(r, n - r);
 
    // iterate over n
    for (var i = mx + 1; i <= n; i++) {
 
        // calculate result
        var denominator = Math.pow(i, i);
        var numerator = Math.pow(i - mx, i - mx);
        finalDenominator = (finalDenominator
                            * denominator)
                           / numerator;
    }
 
    // return the result
    return finalDenominator;
}
 
// Driver code
var n = 6, r = 2;
document.write( "1/" + calcFunction(n, r));
 
</script>
Producción: 

1/36450000

 

Complejidad de tiempo: O (nlogn)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *