ধরুন আমাদের a^b mod 1337 গণনা করতে হবে যেখানে a হল একটি ধনাত্মক পূর্ণসংখ্যা এবং b হল একটি অ্যারের আকারে দেওয়া একটি অত্যন্ত বড় ধনাত্মক পূর্ণসংখ্যা। সুতরাং a =2 এবং b =[1,0] হলে আউটপুট হবে 1024
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
powerMod() পদ্ধতির সংজ্ঞা দিন এটি বেস এবং পাওয়ার নেয়
-
m :=1337, ret :=1
-
যখন পাওয়ার 0
নয়-
যদি পাওয়ার বিজোড় হয়, তাহলে ret :=ret * base mod m
-
base :=base^2 mod m
-
power :=power / 2
-
-
রিটার্ন রিটার্ন
-
সুপার পাওয়ার() সংজ্ঞায়িত করুন, এটি a এবং b
নেয় -
যদি b =0 এর আকার হয়, তাহলে 1
ফেরত দিন -
last :=b
এর শেষ উপাদান -
b
থেকে শেষ উপাদান মুছুন -
রিটার্ন powerMod(superpower(a, b), 10) * powerMod(a, last)) mod 1337
উদাহরণ(C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int powerMod(lli base, lli power){ lli mod = 1337; lli ret = 1; while(power){ if(power & 1) ret = (ret * base) % mod; base = (base * base) % mod; power >>= 1; } return ret; } int superPow(int a, vector<int>& b) { if(b.size() == 0) return 1; int last = b.back(); b.pop_back(); return (powerMod(superPow(a, b), 10) * powerMod(a, last)) % 1337; } }; main(){ Solution ob; vector<int> v = {1,0}; cout << (ob.superPow(2, v)); }
ইনপুট
2 [1,0]
আউটপুট
1024