Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ . में पहले N फैक्टोरियल का उत्पाद

एक संख्या 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

  1. सी ++ में एक उत्पाद सरणी पहेली?

    यहां हम सरणी से संबंधित एक दिलचस्प समस्या देखेंगे। n तत्वों के साथ एक सरणी है। हमें n तत्वों की एक और सरणी बनानी है। लेकिन दूसरी सरणी की i-वें स्थिति i-वें तत्व को छोड़कर पहले सरणी के सभी तत्वों का गुणनफल धारण करेगी। और एक बाधा यह है कि हम इस समस्या में डिवीजन ऑपरेटर का उपयोग नहीं कर सकते हैं। यदि

  1. सी ++ एसटीएल में lldiv () फ़ंक्शन

    C++ STL में lldiv() फ़ंक्शन दो संख्याओं के भागफल और शेष भाग का परिणाम देता है। एल्गोरिदम 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() { &

  1. C++ में असाइनमेंट ऑपरेटर्स

    असाइनमेंट ऑपरेटर बाएं ऑपरेंड द्वारा निर्दिष्ट ऑब्जेक्ट में एक मान संग्रहीत करता है। दो प्रकार के असाइनमेंट ऑपरेशंस हैं:साधारण असाइनमेंट, जिसमें दूसरे ऑपरेंड का मान पहले ऑपरेंड द्वारा निर्दिष्ट ऑब्जेक्ट में संग्रहीत किया जाता है, और कंपाउंड असाइनमेंट, जिसमें एक अंकगणित, शिफ्ट, या बिटवाइज़ ऑपरेशन को स