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

सी ++ में एक प्राइम के मोड के तहत शक्ति की शक्ति पाएं

इस समस्या में हमें चार मान A, B, C, M (एक अभाज्य संख्या) दिए गए हैं। हमारा काम एक प्रमुख मोड के तहत शक्ति की शक्ति का पता लगाना है।

हमें बस (ए ^ (बी ^ सी)) (मॉड एम) का मूल्य खोजने की जरूरत है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

A = 3, B = 6, C = 2, M = 11

आउटपुट

3

स्पष्टीकरण

(ए ^ (बी ^ सी)) =(3 ^ (6 ^ 2)) =(3 ^ (36)) (मोड 11) =3

समाधान दृष्टिकोण

समस्या का एक सरल समाधान (ए ^ (बी ^ सी)) के मूल्यों की सीधे गणना करना है, जो पहले (बी ^ सी) और फिर (ए ^ (बी ^ सी)) के मूल्य की गणना करके किया जाता है। अपना मोड ले रहा है। (बी ^ सी) के परिणामस्वरूप एक विशाल आंकड़ा भंडारण होगा जो एक कार्य हो सकता है। और गणना से अतिप्रवाह हो सकता है।

इसलिए, मूल्यों को खोजने के लिए फ़र्मेट के लिटिल थ्योरम का उपयोग करना एक अधिक कुशल तरीका होगा।

प्रमेय है,

a^(m-1) = 1 (mod M) where m is a prime number.

इसका उपयोग करके हम अपनी समस्या के bc को कई रूपों में बदल देंगे,

x*(M-1) + y, हमारे दिए गए M मान के लिए।

फ़र्मेट के प्रमेय का उपयोग करते हुए, भाग A^(x*(M-1)) 1 बन जाता है।

यह ए y . का मान ज्ञात करने के लिए गणना को कम कर देगा ।

y के मान की गणना इस प्रकार की जा सकती है,

बी c =एक्स*(एम-1) + वाई

जब हम B c . को विभाजित करते हैं तो इससे y शेष बचता है द्वारा (एम-1),

तो, y =B c % (एम-1)

यह परिणाम को बहुत आसान बना देता है क्योंकि हमें खोजने की आवश्यकता होती है,

(A ^ ((B^C) %( M-1)) % M

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
int calcPowerMod(int x, int y, int p) {
   int powMod = 1;
   x = x % p;
   while (y > 0) {
      if (y & 1)
         powMod = (powMod*x) % p;
      y /=2; // y = y/2
      x = (x*x) % p;
   }
   return powMod;
}
int findPowerOfPowerMod(int A, int B, int C, int M) {
   return calcPowerMod(A, calcPowerMod(B, C, M-1), M);
}
int main() {
   int A = 3, B = 6, C = 2, M = 11;
   cout<<"The power of power under modulo is "<<findPowerOfPowerMod(A, B, C, M);
   return 0;
}

आउटपुट

The power of power under modulo is 3

  1. सी++ में दी गई बाधाओं के तहत डुप्लीकेट खोजें

    मान लीजिए कि हमारे पास 6 अलग-अलग संख्याओं वाली एक सूची है। केवल एक संख्या को पांच बार दोहराया जाता है। तो सरणी में कुल 10 तत्व हैं। केवल दो तुलनाओं का उपयोग करके डुप्लिकेट संख्याएं खोजें। अगर सूची [1, 2, 3, 4, 4, 4, 4, 4, 5, 6] जैसी है, तो आउटपुट 4 है। चूँकि केवल 10 संख्याएँ हैं, तो किसी भी प्रकार

  1. C++ में बैलेंस्ड प्राइम

    बैलेंस्ड प्राइम संख्या एक अभाज्य संख्या है जिसका पिछली और अगली अभाज्य संख्याओं के लिए समान अंतर है। यानी यह निकटतम अगले अभाज्य और पिछले अभाज्य का माध्य है। एक अभाज्य संख्या के संतुलित अभाज्य होने के लिए, उसे निम्न सूत्र का पालन करना चाहिए - पीएन =(पी(एन-1) + पी(एन+1)) / 2 जहाँ n एक अभाज्य संख्या

  1. ज्ञात कीजिए कि C++ में दिए गए अभाज्य से nCr विभाज्य है या नहीं

    मान लीजिए कि तीन चर N, R और P हैं। N और R का उपयोग N प्राप्त करने के लिए किया जाता है सीआर और P एक अभाज्य है। हमें यह पता लगाना है कि क्या N सीआर P से विभाज्य है। मान लीजिए हमारे पास कुछ संख्याएँ N =7, R =2 और P =3 हैं, तो 7 सी2 =21, यह 3 से विभाज्य है, इसलिए आउटपुट सत्य होगा। हम जानते हैं कि N सीआ