logo

Găsiți (a^b)%m unde „a” este foarte mare

Încercați-l pe GfG Practice ' title= #practiceLinkDiv { display: none !important; }

Date trei numere a b şi m unde 1<=bm<=10^6 şi 'o' poate fi foarte mare și conține până la 10^6 cifre. Sarcina este de a găsi (a^b)%m .

Exemple: 

  Input :   a = 3 b = 2 m = 4   Output :   1   Explanation :   (3^2)%4 = 9%4 = 1   Input :   a = 987584345091051645734583954832576 b = 3 m = 11   Output:   10
Recommended Practice Găsiți (a^b)%m Încearcă!

Această problemă se bazează în esență pe aritmetică modulară. Putem scrie (a^b) % m ca (a%m) * (a%m) * (a%m) * ... (a%m) de b ori . Mai jos este un algoritm pentru a rezolva această problemă: 



  • Deoarece „a” este foarte mare, citiți „a” ca șir.
  • Acum încercăm să reducem „a”. Luăm modulo de „a” cu m o dată, adică; ans = a % m în acest fel acum ans=a%m se află între intervalul întreg de la 1 la 10^6, adică; 1<= a%m <= 10^6.
  • Acum înmulțiți ani de b-1 ori și simultan să ia mod de înmulțire intermediară rezultat cu m deoarece înmulțirea intermediară a ani poate depăși intervalul întregului și va produce răspuns greșit.
C++
// C++ program to find (a^b) mod m for a large 'a' #include   using namespace std; // utility function to calculate a%m unsigned int aModM(string s unsigned int mod) {  unsigned int number = 0;  for (unsigned int i = 0; i < s.length(); i++)  {  // (s[i]-'0') gives the digit value and form  // the number  number = (number*10 + (s[i] - '0'));  number %= mod;  }  return number; } // Returns find (a^b) % m unsigned int ApowBmodM(string &a unsigned int b  unsigned int m) {  // Find a%m  unsigned int ans = aModM(a m);  unsigned int mul = ans;  // now multiply ans by b-1 times and take  // mod with m  for (unsigned int i=1; i<b; i++)  ans = (ans*mul) % m;  return ans; } // Driver program to run the case int main() {  string a = '987584345091051645734583954832576';  unsigned int b=3 m=11;  cout << ApowBmodM(a b m);  return 0; } 
Java
// Java program to find (a^b) mod m for a large 'a' public class GFG {    // utility function to calculate a%m  static int aModM(String s int mod)  {  int number = 0;  for (int i = 0; i < s.length(); i++)  {    // (s[i]-'0') gives the digit  // value and form the number  number = (number * 10 );  int x = Character.getNumericValue(s.charAt(i));  number = number + x;  number %= mod;  }    return number;  }  // Returns find (a^b) % m  static int ApowBmodM(String a int b int m)  {    // Find a%m  int ans = aModM(a m);  int mul = ans;    // now multiply ans by b-1 times   // and take mod with m  for (int i = 1; i < b; i++)  ans = (ans * mul) % m;    return ans;  }  // Driver code  public static void main(String args[])  {  String a = '987584345091051645734583954832576';  int b = 3 m = 11;  System.out.println(ApowBmodM(a b m));  } } // This code is contributed by Sam007 
Python3
# Python program to find (a^b) mod m for a large 'a' def aModM(s mod): number = 0 # convert string s[i] to integer which gives # the digit value and form the number for i in range(len(s)): number = (number*10 + int(s[i])) number = number % m return number # Returns find (a^b) % m def ApowBmodM(a b m): # Find a%m  ans = aModM(a m) mul = ans # now multiply ans by b-1 times and take # mod with m for i in range(1b): ans = (ans*mul) % m return ans # Driver program to run the case a = '987584345091051645734583954832576' b m = 3 11 print (ApowBmodM(a b m)) 
C#
 // C# program to find (a^b) mod m // for a large 'a' using System; class GFG {   // utility function to calculate a%m static int aModM(string s int mod) {  int number = 0;  for (int i = 0; i < s.Length; i++)  {    // (s[i]-'0') gives the digit  // value and form the number  number = (number * 10 );  int x = (int)(s[i] - '0');  number = number + x;  number %= mod;  }  return number; } // Returns find (a^b) % m static int ApowBmodM(string a int b   int m) {    // Find a%m  int ans = aModM(a m);  int mul = ans;  // now multiply ans by b-1 times   // and take mod with m  for (int i = 1; i < b; i++)  ans = (ans * mul) % m;  return ans; } // Driver Code public static void Main() {  string a = '987584345091051645734583954832576';  int b=3 m=11;  Console.Write(ApowBmodM(a b m));   } } // This code is contributed by Sam007   
PHP
 // PHP program to find (a^b) // mod m for a large 'a' // utility function to  // calculate a%m function aModM($s $mod) { $number = 0; for ($i = 0; $i < strlen($s); $i++) { // (s[i]-'0') gives the digit // value and form the number $number = ($number * 10 + ($s[$i] - '0')); $number %= $mod; } return $number; } // Returns find (a^b) % m function ApowBmodM($a $b$m) { // Find a%m $ans = aModM($a $m); $mul = $ans; // now multiply ans by  // b-1 times and take // mod with m for ($i = 1; $i < $b; $i++) $ans = ($ans * $mul) % $m; return $ans; } // Driver code $a = '987584345091051645734583954832576'; $b = 3; $m = 11; echo ApowBmodM($a $b $m); return 0; // This code is contributed by nitin mittal. ?> 
JavaScript
<script> // JavaScript program to find (a^b) mod m // for a large 'a' // Utility function to calculate a%m function aModM(s mod) {  let number = 0;  for(let i = 0; i < s.length; i++)  {    // (s[i]-'0') gives the digit  // value and form the number  number = (number * 10 );  let x = (s[i] - '0');  number = number + x;  number %= mod;  }  return number; }   // Returns find (a^b) % m function ApowBmodM(a b m) {    // Find a%m  let ans = aModM(a m);  let mul = ans;    // Now multiply ans by b-1 times   // and take mod with m  for(let i = 1; i < b; i++)  ans = (ans * mul) % m;    return ans; }   // Driver Code let a = '987584345091051645734583954832576'; let b = 3 m = 11; document.write(ApowBmodM(a b m)); // This code is contributed by souravghosh0416 </script> 

Ieșire
10

Complexitatea timpului: O(doar(a)+b)

Spațiu auxiliar: O(1)

Abordare eficientă: Înmulțirile de mai sus pot fi reduse la buștean b prin folosire exponentiare rapidă modulară unde calculăm rezultatul prin reprezentarea binară a exponentului (b) . Dacă bitul setat este 1 Înmulțim valoarea curentă a bazei până la rezultat și pătratăm valoarea bazei pentru fiecare apel recursiv.

Cod recursiv:

C++14
// C++ program to find (a^b) mod m for a large 'a' with an // efficient approach. #include    using namespace std; typedef long long ll; // Reduce the number B to a small number // using Fermat Little ll MOD(string num int mod) {  ll res = 0;  for (int i = 0; i < num.length(); i++)  res = (res * 10 + num[i] - '0') % mod;  return res; } ll ModExponent(ll a ll b ll m) {  ll result;  if (a == 0)  return 0;  else if (b == 0)  return 1;  else if (b & 1) {  result = a % m;  result = result * ModExponent(a b - 1 m);  }  else {  result = ModExponent(a b / 2 m);  result = ((result * result) % m + m) % m;  }  return (result % m + m) % m; } int main() {  // String input as b is very large  string a = '987584345091051645734583954832576';  // String input as b is very large  ll b = 3;  ll m = 11;  ll remainderA = MOD(a m);  cout << ModExponent(remainderA b m);  return 0; } 
Java
// Java program to find (a^b) mod m for a large 'a' with an // efficient approach. public class GFG  {    // Reduce the number B to a small number  // using Fermat Little  static long MOD(String num long mod)  {  long res = 0;  for (int i = 0; i < num.length(); i++) {  res = (res * 10 + num.charAt(i) - '0') % mod;  }  return res;  }  // Calculate the ModExponent of the given large number  // 'a'  static long ModExponent(long a long b long m)  {  long result;  if (a == 0) {  return 0;  }  else if (b == 0) {  return 1;  }  else if (b % 2 != 0) {  result = a % m;  result = result * ModExponent(a b - 1 m);  }  else {  result = ModExponent(a b / 2 m);  result = ((result * result) % m + m) % m;  }  return (result % m + m) % m;  }  public static void main(String[] args)  {  // String input as a is very large  String a = '987584345091051645734583954832576';  long b = 3;  long m = 11;  long remainderA = MOD(a m);  System.out.println(ModExponent(remainderA b m));  } } // The code is contributed by Gautam goel (gautamgoel962) 
Python3
# Python3 program to find (a^b) mod m # for a large 'a' # Utility function to calculate a%m def MOD(s mod): res = 0 for i in range(len(s)): res = (res * 10 + int(s[i])) % mod return res # Returns find (a^b) % m def ModExponent(a b m): if (a == 0): return 0 elif (b == 0): return 1 elif (b % 2 != 0): result = a % m result = result * ModExponent(a b - 1 m) else: result = ModExponent(a b / 2 m) result = ((result * result) % m + m) % m return (result % m + m) % m # Driver Code a = '987584345091051645734583954832576' b = 3 m = 11 remainderA = MOD(a m) print(ModExponent(remainderA b m)) # This code is contributed by phasing17 
C#
// C# program to find (a^b) mod m for a large 'a' with an // efficient approach. using System; using System.Collections.Generic; public class GFG {  // Reduce the number B to a small number  // using Fermat Little  static long MOD(string num long mod)  {  long res = 0;  for (int i = 0; i < num.Length; i++) {  res = (res * 10 + num[i] - '0') % mod;  }  return res;  }  // Calculate the ModExponent of the given large number  // 'a'  static long ModExponent(long a long b long m)  {  long result;  if (a == 0) {  return 0;  }  else if (b == 0) {  return 1;  }  else if (b % 2 != 0) {  result = a % m;  result = result * ModExponent(a b - 1 m);  }  else {  result = ModExponent(a b / 2 m);  result = ((result * result) % m + m) % m;  }  return (result % m + m) % m;  }  // Driver Code  public static void Main(string[] args)  {  // String input as a is very large  string a = '987584345091051645734583954832576';  long b = 3;  long m = 11;  // Function Call  long remainderA = MOD(a m);  Console.WriteLine(ModExponent(remainderA b m));  } } // The code is contributed by phasing17 
JavaScript
<script> // JavaScript program to find (a^b) mod m // for a large 'a' // Utility function to calculate a%m function MOD(s mod) {    var res = 0;  for (var i = 0; i < s.length; i++) {  res = (res * 10 + (s[i] - '0')) % mod;  }  return res; } // Returns find (a^b) % m function ModExponent(a b m) {    var result;  if (a == 0) {  return 0;  }  else if (b == 0) {  return 1;  }  else if (b % 2 != 0) {  result = a % m;  result = result * ModExponent(a b - 1 m);  }  else {  result = ModExponent(a b / 2 m);  result = ((result * result) % m + m) % m;  }  return (result % m + m) % m; }   // Driver Code let a = '987584345091051645734583954832576'; let b = 3 m = 11; var remainderA = MOD(a m); document.write(ModExponent(remainderA b m)); // This code is contributed by shinjanpatra. </script> 

Ieșire
10

Complexitatea timpului: O(len(a)+ log b)

Spațiu auxiliar: O(logb)

Cod iterativ eficient în spațiu:

C++14
// C++ program to find (a^b) mod m for a large 'a' #include   using namespace std; typedef long long ll; // utility function to calculate a%m and b%m ll aModM(string s ll mod) {  ll number = 0;  for (ll i = 0; i < s.length(); i++)  {  // (s[i]-'0') gives the digit value and form  // the number  number = (number*10 + (s[i] - '0'));  number %= mod;  }  return number; } // Returns find (a^b) % m ll ApowBmodM(ll x ll yll m) {  ll res=1;  while(y)  {  if(y&1)  res=(res*x)%m;  y=y>>1;  x=((x*x)%m+m)%m;  }  return (res%m+m)%m; } // Driver program to run the case int main() {  string a = '987584345091051645734583954832576';  ll b=3;  ll m=11;  // Find a%m  ll x=aModM(am);  cout << ApowBmodM(xbm);  return 0; } 
Java
// Java program to find (a^b) mod m for a large 'a' import java.util.*; class GFG {  // utility function to calculate a%m and b%m  static long aModM(String s long mod)  {  long number = 0;  for (int i = 0; i < s.length(); i++) {  // (s[i]-'0') gives the digit value and form  // the number  number = (number * 10 + (s.charAt(i) - '0'));  number %= mod;  }  return number;  }  // Returns find (a^b) % m  static long ApowBmodM(long x long y long m)  {  long res = 1;  while (y > 0) {  if ((y & 1) != 0)  res = (res * x) % m;  y = y >> 1;  x = ((x * x) % m + m) % m;  }  return (res % m + m) % m;  }  // Driver program to run the case  public static void main(String[] args)  {  String a = '987584345091051645734583954832576';  long b = 3;  long m = 11;  // Find a%m  long x = aModM(a m);  System.out.println(ApowBmodM(x b m));  } } // This code is contributed by phasing17 
Python3
# Python3 program to find (a^b) mod m for a large 'a' # utility function to calculate a%m and b%m def aModM(s mod): number = 0; for i in range(len(s)): # int(s[i]) gives the digit value and form # the number number = (number * 10 + int(s[i])); number %= mod; return number; # Returns find (a^b) % m def ApowBmodM(x y m): res = 1; while (y > 0): if (y & 1): res = (res * x) % m; y = y >> 1; x = ((x * x) % m + m) % m; return (res % m + m) % m; # Driver program to run the case a = '987584345091051645734583954832576'; b = 3; m = 11; # Find a%m x = aModM(a m); print(ApowBmodM(x b m)); # This code is contributed by phasing17 
C#
// C# program to find (a^b) mod m for a large 'a' using System; class GFG {  // utility function to calculate a%m and b%m  static long aModM(string s long mod)  {  long number = 0;  for (int i = 0; i < s.Length; i++)  {  // (s[i]-'0') gives the digit value and form  // the number  number = (number * 10 + (s[i] - '0'));  number %= mod;  }  return number;  }  // Returns find (a^b) % m  static long ApowBmodM(long x long y long m)  {  long res = 1;  while (y > 0) {  if ((y & 1) != 0)  res = (res * x) % m;  y = y >> 1;  x = ((x * x) % m + m) % m;  }  return (res % m + m) % m;  }  // Driver program to run the case  public static void Main(string[] args)  {  string a = '987584345091051645734583954832576';  long b = 3;  long m = 11;  // Find a%m  long x = aModM(a m);  Console.WriteLine(ApowBmodM(x b m));  } } // This code is contributed by phasing17 
JavaScript
// JavaScript program to find (a^b) mod m for a large 'a' // utility function to calculate a%m and b%m function aModM(s mod) {  let number = 0;  for (var i = 0; i < s.length; i++) {  // parseInt(s[i]) gives the digit value and form  // the number  number = (number * 10 + parseInt(s[i]));  number %= mod;  }  return number; } // Returns find (a^b) % m function ApowBmodM(x y m) {  let res = 1;  while (y) {  if (y & 1)  res = (res * x) % m;  y = y >> 1;  x = ((x * x) % m + m) % m;  }  return (res % m + m) % m; } // Driver program to run the case let a = '987584345091051645734583954832576'; let b = 3; let m = 11; // Find a%m let x = aModM(a m); console.log(ApowBmodM(x b m)); // This code is contributed by phasing17 

Ieșire
10

Complexitatea timpului: O(len(a)+ log b)

Spațiu auxiliar: O(1)

Caz: când atât „a” cât și „b” sunt foarte mari.

De asemenea, putem implementa aceeași abordare dacă ambele 'o' şi 'b' era foarte mare. În acest caz, am fi luat mai întâi împotriva de ea cu m folosind noastre aModM funcţie. Apoi trece-l la cele de mai sus ApowBmodM funcție recursivă sau iterativă pentru a obține rezultatul dorit.

Cod recursiv:

C++14
#include    using namespace std; typedef long long ll; // Reduce the number B to a small number  // using Fermat Little ll MOD(string numint mod) {  ll res=0;    for(int i=0;i<num.length();i++)  res=(res*10+num[i]-'0')%mod;    return res; } ll ModExponent(ll all bll m) {  ll result;  if(a==0)  return 0;  else if(b==0)  return 1;  else if(b&1)  {  result=a%m;  result=result*ModExponent(ab-1m);  }  else{  result=ModExponent(ab/2m);  result=((result%m)*(result%m))%m;  }  return (result%m+m)%m; } int main() {  // String input as b is very large  string a = '987584345091051645734583954832576';  // String input as b is very large  string b = '467687655456765756453454365476765';  ll m = 1000000007;  ll remainderA = MOD(am);  ll remainderB = MOD(bm);    cout << ModExponent(remainderA remainderB m);    return 0; } 
Java
/*package whatever //do not write package name here */ import java.io.*; class GFG {  // Reduce the number B to a small number  // using Fermat Little.  static long MOD(String numint mod)  {  long res = 0;  for(int i = 0; i < num.length(); i++)  {  res = (res * 10 + num.charAt(i) - '0') % mod;  }  return res;  }  static long ModExponent(long along blong m){  long result = 0;  if(a == 0)  return 0;  else if(b == 0)  return 1;  else if((b&1) == 1){  result = a % m;  result = result*ModExponent(a b - 1 m);  }  else{  result = ModExponent(a b/2 m);  result = ((result % m)*(result % m)) % m;  }  return (result % m + m) % m;  }  public static void main (String[] args) {  // String input as b is very large  String a = '987584345091051645734583954832576';  // String input as b is very large  String b = '467687655456765756453454365476765';  int m = 1000000007;  long remainderA = MOD(am);  long remainderB = MOD(bm);  System.out.println(ModExponent(remainderA remainderB m));  } } // This code is contributed by aadityapburujwale 
Python3
# Python3 program to implement the approach # Reduce the number B to a small number # using Fermat Little def MOD(num mod): res = 0; for i in range(len(num)): res = (res * 10 + int(num[i])) % mod; return res; def ModExponent(a b m): if (a == 0): return 0; elif (b == 0): return 1; elif (b & 1): result = a % m; result = result * ModExponent(a b - 1 m); else: b = b // 2 result = ModExponent(a b m); result = ((result % m) * (result % m)) % m; return (result % m + m) % m; # String input as b is very large a = '987584345091051645734583954832576'; # String input as b is very large b = '467687655456765756453454365476765'; m = 1000000007; remainderA = (MOD(a m)); remainderB = (MOD(b m)); print(ModExponent(remainderA remainderB m)); # This code is contributed by phasing17 
C#
// C# program to implement the approach using System; using System.Collections.Generic; class GFG {  // Reduce the number B to a small number  // using Fermat Little.  static long MOD(string num int mod)  {  long res = 0;  for (int i = 0; i < num.Length; i++) {  res = (res * 10 + num[i] - '0') % mod;  }  return res;  }  static long ModExponent(long a long b long m)  {  long result = 0;  if (a == 0)  return 0;  else if (b == 0)  return 1;  else if ((b & 1) == 1) {  result = a % m;  result = result * ModExponent(a b - 1 m);  }  else {  result = ModExponent(a b / 2 m);  result = ((result % m) * (result % m)) % m;  }  return (result % m + m) % m;  }  public static void Main(string[] args)  {  // String input as b is very large  string a = '987584345091051645734583954832576';  // String input as b is very large  string b = '467687655456765756453454365476765';  int m = 1000000007;  long remainderA = MOD(a m);  long remainderB = MOD(b m);  Console.WriteLine(  ModExponent(remainderA remainderB m));  } } // This code is contributed by phasing17 
JavaScript
// JavaScript program to implement the approach // Reduce the number B to a small number // using Fermat Little function MOD(num mod) {  let res = 0;  for (var i = 0; i < num.length; i++)  res = (res * 10 + parseInt(num[i])) % mod;  return res; } function ModExponent(a b m) {  let result;  if (a == 0n)  return 0n;  else if (b == 0n)  return 1n;  else if (b & 1n) {  result = a % m;  result = result * ModExponent(a b - 1n m);  }  else {  b = b / 2n - (b % 2n);  result = ModExponent(a b m);  result = ((result % m) * (result % m)) % m;  }  return (result % m + m) % m; } // String input as b is very large let a = '987584345091051645734583954832576'; // String input as b is very large let b = '467687655456765756453454365476765'; let m = 1000000007; let remainderA = BigInt(MOD(a m)); let remainderB = BigInt(MOD(b m)); console.log(ModExponent(remainderA remainderB BigInt(m))); // This code is contributed by phasing17 

Ieșire
546081867

Complexitatea timpului: O(len(a)+len(b)+log b)

Spațiu auxiliar: O(logb)

Cod iterativ eficient în spațiu:

C++14
// C++ program to find (a^b) mod m for a large 'a' #include    using namespace std; typedef long long ll; // utility function to calculate a%m and b%m ll aModM(string s ll mod) {  ll number = 0;  for (ll i = 0; i < s.length(); i++) {  // (s[i]-'0') gives the digit value and form  // the number  number = (number * 10 + (s[i] - '0'));  number %= mod;  }  return number; } // Returns find (a^b) % m ll ApowBmodM(string& a string& b ll m) {  ll res = 1;  // Find a%m  ll x = aModM(a m);  // Find b%m  ll y = aModM(b m);  while (y) {  if (y & 1)  res = (res * x) % m;  y = y >> 1;  x = ((x % m) * (x % m)) % m;  }  return (res % m + m) % m; } // Driver program to run the case int main() {  string a = '987584345091051645734583954832576';  string b = '467687655456765756453454365476765';  ll m = 1000000007;  cout << ApowBmodM(a b m);  return 0; } 
Java
/*package whatever //do not write package name here */ import java.io.*; class GFG {  // utility function to calculate a%m and b%m  static long aModM(String s long mod){  long number = 0;  for (int i = 0; i < s.length(); i++)  {  // (s.charAt(i)-'0') gives the digit value and form  // the number  number = (number * 10 + (s.charAt(i) - '0'));  number %= mod;  }  return number;  }  // Returns find (a^b) % m  static long ApowBmodM(String a String b long m)  {  long res = 1;  // Find a%m  long x = aModM(a m);  // Find b%m  long y = aModM(b m);  while (y>0) {  if ((y & 1)==1)  res = (res * x) % m;  y = y >> 1;  x = ((x % m) * (x % m)) % m;  }  return (res % m + m) % m;  }  public static void main (String[] args) {  String a = '987584345091051645734583954832576';  String b = '467687655456765756453454365476765';  long m = 1000000007;  System.out.println(ApowBmodM(a b m));  } } // This code is contributed by aadityapburujwale 
Python3
# Python3 program to find (a^b) mod m for a large 'a' # utility function to calculate a%m and b%m def aModM(s mod): number = 0 for i in range(len(s)): # (s[i]-'0') gives the digit value and form # the number number = (number * 10 + (int(s[i]))) number %= mod return number # Returns find (a^b) % m def ApowBmodM(a b m): res = 1 # Find a%m x = aModM(a m) # Find b%m y = aModM(b m) while (y > 0): if (y & 1): res = (res * x) % m y = y >> 1 x = ((x % m) * (x % m)) % m return (res % m + m) % m # Driver program to run the case a = '987584345091051645734583954832576' b = '467687655456765756453454365476765' m = 1000000007 print(ApowBmodM(a b m)) # This code is contributed by phasing17 
JavaScript
// JavaScript program to find (a^b) mod m for a large 'a' // utility function to calculate a%m and b%m function aModM(s mod) {  let number = 0n;  for (let i = 0; i < s.length; i++) {  // (s[i]-'0') gives the digit value and form  // the number  number = (number * 10n + BigInt(parseInt(s[i])));  number %= mod;  }  return number; } // Returns find (a^b) % m function ApowBmodM(a b m) {  let res = 1n;  // Find a%m  let x = BigInt(aModM(a m));  // Find b%m  let y = BigInt(aModM(b m));  while (y > 0n) {  if (y & 1n)  res = (res * x) % m;  y = y >> 1n;  x = ((x % m) * (x % m)) % m;  }  return (res % m + m) % m; } // Driver program to run the case let a = '987584345091051645734583954832576'; let b = '467687655456765756453454365476765'; let m = 1000000007n; console.log(ApowBmodM(a b m)); // This code is contributed by phasing17 
C#
// C# program to find (a^b) mod m for a large 'a' using System; using System.Collections.Generic; class GFG {  // utility function to calculate a%m and b%m  static long aModM(string s long mod)  {  long number = 0;  for (int i = 0; i < s.Length; i++) {  // (s[i]-'0') gives the digit value and form  // the number  number = (number * 10 + (s[i] - '0'));  number %= mod;  }  return number;  }  // Returns find (a^b) % m  static long ApowBmodM(string a string b long m)  {  long res = 1;  // Find a%m  long x = aModM(a m);  // Find b%m  long y = aModM(b m);  while (y != 0) {  if ((y & 1) != 0)  res = (res * x) % m;  y = y >> 1;  x = ((x % m) * (x % m)) % m;  }  return (res % m + m) % m;  }  // Driver program to run the case  public static void Main(string[] args)  {  string a = '987584345091051645734583954832576';  string b = '467687655456765756453454365476765';  long m = 1000000007;  Console.WriteLine(ApowBmodM(a b m));  } } // This code is contributed by phasing17 

Ieșire
546081867

Complexitatea timpului: O(len(a)+len(b)+ log b)

Spațiu auxiliar: O(1)


Daca iti place GeeksforGeeks și ați dori să contribui puteți scrie și un articol folosind scrie.geeksforgeeks.org sau trimiteți articolul dumneavoastră la [email protected].
 

Creați un test