एक संख्या N को देखते हुए, कार्य 1000000007 द्वारा पहले N फैक्टोरियल मोडुलो के उत्पाद को खोजना है। फैक्टोरियल का तात्पर्य है जब हम उस संख्या सहित उस संख्या के नीचे की सभी संख्याओं का गुणनफल पाते हैं और इसे द्वारा निरूपित किया जाता है! (विस्मयादिबोधक चिह्न), उदाहरण के लिए - 4! =4x3x2x1 =24.
तो, हमें 1000000007 तक n फ़ैक्टोरियल और मॉड्यूल का उत्पाद खोजना होगा..
बाधा
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