C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の最初のN階乗の積


数Nが与えられた場合、タスクは1000000007を法とする最初のN階乗の積を見つけることです。階乗は、その数を含むその数より下のすべての数の積を見つけ、!で表される場合を意味します。 (感嘆符)、たとえば-4! =4x​​3x2x1=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) {
      // add x where y is odd.
      if (y % 2 == 1)
         result = (result + x) % mod;
      // Multiply x with 2
      x = (x * 2) % mod;
      // Divide y by 2
      y /= 2;
   }
   return result % mod;
}
long long int nfactprod(long long int num){
   // Initialize product and fact with 1
   long long int product = 1, fact = 1;
   long long int MOD = 1e9 + 7;
   for (int i = 1; i <= num; i++) {
      // to find factorial for every iteration
      fact = mulmod(fact, i, MOD);
      // product of first i factorials
      product = mulmod(product, fact, MOD);
      //when product divisible by MOD return 0
      if (product == 0)
         return 0;
   }
   return product;
}
int main(){
   long long int num = 3;
   printf("%lld \n", (nfactprod(num)));
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

12

  1. C ++ STLのlldiv()関数

    C ++ STLのlldiv()関数は、商と2つの数値の除算の余りの結果を提供します。 アルゴリズム Begin Take two long type numbers as input. Call function lldiv(). Print the quotient and remainder. End. サンプルコード #include <cstdlib> #include <iostream> using namespace std; int main() {    long long q = 500LL;   &

  2. C++の代入演算子

    代入演算子は、左のオペランドで指定されたオブジェクトに値を格納します。代入演算には、第2オペランドの値を第1オペランドで指定したオブジェクトに格納する単純代入と、算術演算、シフト演算、ビット演算を行ってから代入演算の2種類があります。結果。 例 簡単な代入演算子の例- #include<iostream> using namespace std; int main() {    int i;    i = 10;    // Simple Assignment    cout << i; &