给定整数N ,任务是找到MDAS阶乘。
否的一般析因。 N由下式给出:
Factorial(N) = (N)*(N-1)*(N-2)*(N-3)*(N-4)*(N-5)*(N-6)*(N-7)- – – – – -(3)*(2)*(1).
在MDAS阶乘中,不是简单地将数字从N乘以1,而是以重复模式执行四个运算,即乘法(*),除法(/),加法(+)和减法(-),如下所示:
MDAS_Factorial(N) = (N) * (N-1) / (N-2) + (N-3) – (N-4) – – – – – upto 1.
通过以降序使用整数,我们将乘法运算交换为固定的旋转操作:按上述顺序乘(*),除(/),加(+)和减(-)。
例子:
简单方法::想法是为每个操作周期(*,/,+,-)使用一个循环,并计算N的MDAS_Factorial。但是,如果N非常大,这可能会很慢。这种方法的时间复杂度为O(N)。
高效的方法:
如果我们仔细观察,可以得出以下结论:
- 如果N小于或等于2,则答案将是N本身。
- 如果N为3或N为4,则答案为N + 3。
- 如果(N – 4)可被4整除,则答案为N + 1。
- 如果(N – 4)在除以4时得到余数1或2,则答案为N + 2。
- 对于其余值,答案将为N – 1。
下面是上述方法的实现
C++
Java
Python3
C#
PHP
输出 :
时间复杂度: O(1)
辅助空间: O(1)