C ++中前N个阶乘的乘积

给定数字N,任务是找到前N个阶乘以1000000007为模的乘积。阶乘表示当我们找到该数字以下所有数字的乘积(包括该数字)时,表示为!(感叹号),例如-4!= 4x3x2x1 = 24。

因此,我们必须找到n阶乘和1000000007模的乘积。

约束 

1 ≤ N ≤ 1e6.

输入值 

n = 9

输出结果 

27

说明 

1! * 2! * 3! * 4! * 5! * 6! * 7! * 8! * 9! Mod (1e9 + 7) = 27

输入值 

n = 3

输出结果 

12

说明 

1! * 2! * 3! mod (1e9 +7) = 12

解决问题的方法如下

  • 从i = 1到n递归找到阶乘并乘积所有阶乘

  • 将所有阶乘的乘积乘以1e9 +7

  • 返回结果。

算法

In Fucntion long long int mulmod(long long int x, long long int y, long long int mod)

Step 1→ Declare and Initialize result as 0

Step 2→ Set x as x % mod

Step 3→ While y > 0

   If y % 2 == 1 then,

      Set result as (result + x) % mod

   Set x as (x * 2) % mod

   Set y as y/ 2

Step 4→ return (result % mod)

In Function long long int nfactprod(long long int num)

   Step 1→ Declare and Initialize product with 1 and fact with 1

   Step 2→ Declare and Initialize MOD as (1e9 + 7)

   Step 3→ For i = 1 and i <= num and i++

      Set fact as (call function mulmod(fact, i, MOD))

      Set product as (call function mulmod(product, fact, MOD))

      If product == 0 then,

         Return 0

   Step 4→ Return product

In Function int main()   Step 1→ Declare and Initialize num = 3

   Step 2→ Print the result by calling (nfactprod(num))

Stop

示例

#include <stdio.h>

long long int mulmod(long long int x, long long int y, long long int mod){

   long long int result = 0;

   x = x % mod;

   while (y > 0) {

      //在y为奇数的地方加x。

      if (y % 2 == 1)

         result = (result + x) % mod;

      //将x乘以2-

      x = (x * 2) % mod;

      //y除以2-

      y /= 2;

   }

   return result % mod;

}

long long int nfactprod(long long int num){

   //初始化产品和事实

   long long int product = 1, fact = 1;

   long long int MOD = 1e9 + 7;

   for (int i = 1; i <= num; i++) {

      //查找每次迭代的阶乘

      fact = mulmod(fact, i, MOD);

      //第一个i阶乘的乘积

      product = mulmod(product, fact, MOD);

      //当产品可被MOD整除时返回0-

      if (product == 0)

         return 0;

   }

   return product;

}

int main(){

   long long int num = 3;

   printf("%lld \n", (nfactprod(num)));

   return 0;

}

输出结果

如果运行上面的代码,它将生成以下输出-

12

以上是 C ++中前N个阶乘的乘积 的全部内容, 来源链接: utcz.com/z/338287.html

回到顶部