C++の最初のN階乗の積
数Nが与えられた場合、タスクは1000000007を法とする最初のN階乗の積を見つけることです。階乗は、その数を含むその数より下のすべての数の積を見つけ、!で表される場合を意味します。 (感嘆符)、たとえば-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) { // 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
-
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; &
-
C++の代入演算子
代入演算子は、左のオペランドで指定されたオブジェクトに値を格納します。代入演算には、第2オペランドの値を第1オペランドで指定したオブジェクトに格納する単純代入と、算術演算、シフト演算、ビット演算を行ってから代入演算の2種類があります。結果。 例 簡単な代入演算子の例- #include<iostream> using namespace std; int main() { int i; i = 10; // Simple Assignment cout << i; &