Open in App
Not now

# Calculate MDAS Factorial of given number

• Difficulty Level : Hard
• Last Updated : 31 May, 2022

Given an integer N, the task is to find the MDAS factorial.
The general factorial of a no. N is given by:

Factorial(N) = (N)*(N-1)*(N-2)*(N-3)*(N-4)*(N-5)*(N-6)*(N-7)- – – – – -(3)*(2)*(1).

In MDAS factorial, instead of simply multiplying the numbers from N to 1, we perform four operations, Multiplication(*), Divide(/), Addition(+) and Subtraction(-) in a repeating pattern as shown below:

MDAS_Factorial(N) = (N) * (N-1) / (N-2) + (N-3) – (N-4) – – – – – upto 1.

By using the integers in decreasing order, we swap the multiplication operations for fixed rotation of operations: multiply (*), divide (/), add (+) and subtract (-) in the above order.

Examples:

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

Simple Approach: The idea is to use a loop for each cycle of operations (*,/,+,-) and calculate the MDAS Factorial of N. But this may work slow if N is very large. The Time Complexity of this approach is O(N).

Efficient Approach:
If we observe carefully it can be concluded that:

1. If N is less than or equal to 2 then the answer will be N itself.
2. If N is 3 OR N is 4, the answer is N + 3.
3. If (N – 4) is completely divisible by 4, the answer is N + 1.
4. If (N – 4) gives remainder 1 OR 2 while dividing by 4, the answer is N + 2.
5. For the remaining values, the answer will be N – 1.

Below is the implementation of the above approach

## C++

 `// C++ Program to find MDAS_Factorial` `#include ` `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

 ``

## 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) + ``"
"``)` `N = 10;` `document.write(MDAS_Factorial(N));`   `// This code is contributed by gfgking`

Output:

```7
12```

Time complexity: O(1), since no loop is there.
Auxiliary space: O(1), since no extra space has been taken.

My Personal Notes arrow_drop_up
Related Articles