Dado un número entero N , la tarea es encontrar el factorial MDAS.
El factorial general de un no. N viene dado por:
Factorial(N) = (N)*(N-1)*(N-2)*(N-3)*(N-4)*(N-5)*(N-6)*(N-7) – – – – – -(3)*(2)*(1).
En el factorial MDAS, en lugar de simplemente multiplicar los números de N a 1, realizamos cuatro operaciones, Multiplicación (*), División (/), Suma (+) y Resta (-) en un patrón repetitivo como se muestra a continuación:
MDAS_Factorial(N) = (N) * (N-1) / (N-2) + (N-3) – (N-4) – – – – – hasta 1.
Al usar los números enteros en orden decreciente, cambiamos las operaciones de multiplicación por una rotación fija de operaciones: multiplicar (*), dividir (/), sumar (+) y restar (-) en el orden anterior.
Ejemplos:
Input : N = 4 Output : 7 Explanation : MDAS_Factorial(4) = 4 * 3 / 2 + 1 = 7 Input : N = 10 Output : 12 Explanation : MDAS_Factorial(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 = 12
Enfoque simple: la idea es usar un bucle para cada ciclo de operaciones (*,/,+,-) y calcular el factorial MDAS de N. Pero esto puede funcionar lentamente si N es muy grande. La complejidad temporal de este enfoque es O(N).
Enfoque Eficiente:
Si observamos detenidamente se puede concluir que:
- Si N es menor o igual a 2, la respuesta será N mismo.
- Si N es 3 O N es 4, la respuesta es N + 3.
- Si (N – 4) es completamente divisible por 4, la respuesta es N + 1.
- Si (N – 4) da resto 1 O 2 al dividir por 4, la respuesta es N + 2.
- Para los valores restantes, la respuesta será N – 1.
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ Program to find MDAS_Factorial #include <bits/stdc++.h> using namespace std; // Program to find MDAS_factorial int MDAS_Factorial(int N) { if (N <= 2) return N; if (N <= 4) return (N + 3); if ((N - 4) % 4 == 0) return (N + 1); else if ((N - 4) % 4 <= 2) return (N + 2); else return (N - 1); } // Driver code int main() { int N = 4; cout << MDAS_Factorial(N) << endl; N = 10; cout << MDAS_Factorial(N) << endl; return 0; }
Java
// Java program find MDAS_Factorial import java.util.*; class Count { public static int MDAS_Factorial(int N) { if (N <= 2) return N; if (N <= 4) return (N + 3); if ((N - 4) % 4 == 0) return (N + 1); else if ((N - 4) % 4 <= 2) return (N + 2); else return (N - 1); } public static void main(String[] args) { int N = 4; System.out.println(MDAS_Factorial(N)); N = 10; System.out.println(MDAS_Factorial(N)); } }
Python3
# Python3 code find MDAS_Factorial def MDAS_Factorial( N ): if N <= 2: return N if N <= 4: return N + 3 if (N - 4) % 4 == 0: return N + 1 elif (N - 4) % 4 <= 2: return N + 2 else: return N - 1 # Driver code N = 4 print(MDAS_Factorial( N ) ) N = 10 print(MDAS_Factorial( N ) )
C#
// C# program to find MDAS_Factorial using System; class Count { public static int MDAS_Factorial(int N) { if (N <= 2) return N; if (N <= 4) return (N + 3); if ((N - 4) % 4 == 0) return (N + 1); else if ((N - 4) % 4 <= 2) return (N + 2); else return (N - 1); } // Driver code public static void Main() { int N = 4; Console.WriteLine(MDAS_Factorial(N)); N = 10; Console.WriteLine(MDAS_Factorial(N)); } }
PHP
<?php // PHP Program // Program to find MDAS_factorial function MDAS_Factorial($N) { if ($N <= 2) return N; if ($N <= 4) return ($N + 3); if (($N - 4) % 4 == 0) return ($N + 1); else if (($N - 4) % 4 <= 2) return ($N + 2); else return ($N - 1); } // Driver code $N = 4; echo MDAS_Factorial($N); echo("\n"); $N = 10; echo MDAS_Factorial($N); ?>
Javascript
// Javascript Program // Program to find MDAS_factorial function MDAS_Factorial(N) { if (N <= 2) return N; if (N <= 4) return (N + 3); if ((N - 4) % 4 == 0) return (N + 1); else if ((N - 4) % 4 <= 2) return (N + 2); else return (N - 1); } // Driver code let N = 4; document.write(MDAS_Factorial(N) + "<br>") N = 10; document.write(MDAS_Factorial(N)); // This code is contributed by gfgking
Producción:
7 12
Complejidad de tiempo: O(1), ya que no hay bucle.
Espacio auxiliar: O(1), ya que no se ha ocupado ningún espacio extra.
Publicación traducida automáticamente
Artículo escrito por Chandan_Agrawal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA