codevs 1497 取餘運算

2021-09-23 18:42:00 字數 733 閱讀 7560

題目描述

輸入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 ...