# Calculate MDAS Factorial of given number

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
Explaination : MDAS_Factorial(4) = 4 * 3 / 2 + 1 = 7

Input : N = 10
Output : 12
Explaination :
MDAS_Factorial(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 = 12
```

## Recommended: Please solve it on PRACTICE first, before moving on to the solution.

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

 ` `

Output :

```7
12
```

Time complexity: O(1)
Auxiliary space: O(1)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.

Article Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.