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