題目描述
輸入b,p,k的值,程式設計計算bp mod k的值。其中的b,p,k*k為長整型數(2^31範圍內)。
輸入描述
b p k
輸出描述
輸出b^p mod k=?
=左右沒有空格
樣例輸入
2 10 9
樣例輸出
2^10 mod 9=7
分析這道題要採用模冪運算。
首先引入乙個運算規則:a ^ b % p = ((a % p)^b) % p
利用這個規則我們可以有效地計算x^n(%p)。簡單的演算法是將result初始化為1,然後重複將result乘以x,每次乘法之後應用%運算子(這樣使得result的值變小,以免溢位),執行n次相乘後,result就是我們要找的答案。
這樣對於較小的n值來說,實現是合理的,但是當n的值很大時,需要計算很長時間,是不切實際的。下面的結論可以得到一種更好的演算法。
如果n是偶數,那麼x^n =(x * x)^ [n/2];
如果n是奇數,那麼x^n = x*x^(n-1) = x *(x * x)^ [n/2];
其中[n]是指小於或等於n的最大整數。
#include#includeusing namespace std;
typedef long long ll;
ll powmod(ll x,ll n,ll k)
int main()
codevs 1497取餘運算
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamon 輸入b,p,k的值,程式設計計算bp mod k的值。其中的b,p,k k為長整型數 2 31範圍內 輸入描述 input description b p k 輸出描述 output description 輸出b p m...
codevs 1497 取餘運算
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題目描述 description 輸入b,p,k的值,程式設計計算bp mod k的值。其中的b,p,k k為長整型數 2 31範圍內 輸入描述 input description b p k 輸出描述 output d...
1497 取餘運算
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解輸入b,p,k的值,程式設計計算bp mod k的值。其中的b,p,k k為長整型數 2 31範圍內 輸入描述 input description b p k 輸出描述 output description 輸出b ...