*紀念下ac的第一道快速冪型別題……大佬勿噴,歡迎指出錯誤。*
這道題題目大概是說,給你 b,p,k三個數,請你求出b^p mod k的值。
身為一名資深蒟蒻,習慣性的想到了樸素做法:
for(int i=1;i
<=p;i++)
ans=((ans
%k)*(ans%k))%k;
cout << ans
<< endl;
但是,仔細一想,發現這道題完全可以使用快速冪來解決。
快速冪大概就是將a^b中的b轉換為二進位制,然後用o(log2n)的複雜度算出ans,具體請見下面的例子:
以題目樣例 2^10 mod 9來舉例子
10也就是二進位制中的1010,於是2^10可以轉化為:
2^(2^1)*2^(2^3)
那麼同理,a^10可以轉化為:
a^(2^1)*a^(2^3)
於是,a^b就可以轉化為:b在二進位制中若第i位為1,那麼a*=a^(2^(i+1)),由於要考慮mod k,所以**如下:
int getpaw(int a,int b)
return ans%k;
}
最後附上這道題題解:
#include
#include
#include
using
namespace
std;
long
long b,p,k;
int paww(int a,int b)
return ans%k;
}int main()
codevs 1497 取餘運算
題目描述 輸入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...
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...