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

C++ में पहले N फैक्टोरियल का गुणनफल


एक संख्या N दी गई है, कार्य पहले N फैक्टोरियल का गुणनफल 1000000007 से मोड्यूलो करके निकालना है। फैक्टोरियल का तात्पर्य है जब हम उस संख्या से नीचे की सभी संख्याओं का गुणनफल निकालते हैं जिसमें वह संख्या भी शामिल होती है और इसे ! (विस्मयादिबोधक चिह्न) से दर्शाया जाता है, उदाहरण के लिए: 4! = 4×3×2×1 = 24।

इसलिए, हमें n फैक्टोरियल का गुणनफल निकालना है और 1000000007 से मोड्यूलो करना है।

बाधा

1 ≤ N ≤ 1e6

इनपुट

n = 3

आउटपुट

12

व्याख्या

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

इनपुट

n = 4

आउटपुट

288

व्याख्या

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

समस्या को हल करने के लिए नीचे दिया गया दृष्टिकोण

  • i = 1 से n तक पुनरावर्ती रूप से फैक्टोरियल खोजें और सभी फैक्टोरियल का गुणनफल करें
  • सभी फैक्टोरियल के गुणनफल को 1e9 + 7 से मोड्यूलो करें
  • परिणाम रिटर्न करें।

एल्गोरिदम

In Function long long mulmod(long long x, long long y, long long mod)
    Step 1→ result को 0 के रूप में घोषित और इनिशियलाइज़ करें
    Step 2→ x को x % mod सेट करें
    Step 3→ While y > 0
        यदि y % 2 == 1 तो,
            result को (result + x) % mod सेट करें
        x को (x * 2) % mod सेट करें
        y को y / 2 सेट करें
    Step 4→ return (result % mod)

In Function long long nfactprod(long long num)
    Step 1→ product को 1 और fact को 1 के साथ इनिशियलाइज़ करें
    Step 2→ MOD को (1e9 + 7) के रूप में घोषित और इनिशियलाइज़ करें
    Step 3→ i = 1 से i <= num तक, i++
        fact को (mulmod(fact, i, MOD) फंक्शन कॉल) सेट करें
        product को (mulmod(product, fact, MOD) फंक्शन कॉल) सेट करें
        यदि product == 0 तो,
            0 रिटर्न करें
    Step 4→ product रिटर्न करें

In Function int main()
    Step 1→ num = 3 घोषित और इनिशियलाइज़ करें
    Step 2→ nfactprod(num) कॉल करके परिणाम प्रिंट करें
Stop

उदाहरण

#include <iostream>
using namespace std;

const long long MOD = 1000000007LL;

long long mulmod(long long x, long long y, long long mod) {
    long long 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 nfactprod(long long num) {
    // product और fact को 1 से इनिशियलाइज़ करें
    long long product = 1, fact = 1;
    for (int i = 1; i <= num; i++) {
        // हर पुनरावृत्ति के लिए फैक्टोरियल खोजने के लिए
        fact = mulmod(fact, i, MOD);
        // पहले i फैक्टोरियल का गुणनफल
        product = mulmod(product, fact, MOD);
        // जब product MOD से विभाज्य हो तो 0 रिटर्न करें
        if (product == 0)
            return 0;
    }
    return product;
}

int main() {
    long long num = 3;
    cout << nfactprod(num) << endl;
    return 0;
}

आउटपुट

12

  1. - C++ में प्रोडक्ट ऐरे पजल (अतिरिक्त स्पेस के साथ)

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

  1. - C++ STL में lldiv() फंक्शन

    C++ STL में lldiv() फंक्शन दो संख्याओं के विभाजन के भागफल और शेष का परिणाम देता है। एल्गोरिदम Begin दो लॉन्ग टाइप नंबर इनपुट के रूप में लें। lldiv() फंक्शन कॉल करें। भागफल और शेष प्रिंट करें। End. उदाहरण कोड #include <cstdlib> #include <iostream> using namespace std; int m

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

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