題目:
給定a,b
求出:a^a^a....^a(b個a)
輸入:
a ,b
輸出
運算結果
樣例:
2 3
輸出:16
範圍:a,b<=10^9
我們首先可以得到答案的式子:ans=a^(a^(b-1))
然而(a^(b-1))作為指數太大了,必須取模
令y=(a^(b-1)),p=1e9+7
y=k*φ(p)+(y%φ(p))
因為x^φ(p)ξ1(mod p)
所以a^φ(p)%p=1
所以a^y=a^(y%φ(p))
因為p是素數,所以φ(p)=p-1
所以將a^(b-1)模p-1
用快速冪就可以了
1 #include2 #include3 #include4 #include5using
namespace
std;
6int mod=1000000007;7
long
long
a,b,ans,s;
8long
long qpow(long
long x,int y,int
mo)9
17return
res;18}
19int
main()
20
快速冪取模演算法
因為進製對個位不影響,積的取餘等於取餘的積取餘 includeint powermod int a,int b,int c return ans int main return 0 1.如果b是偶數,我們可以記k a2 mod c,那麼求 k b 2 mod c 就可以了。2.如果b是奇數,我們也可...
快速冪取模演算法
求ab c,其中a,b的值可能很大,導致ab的值long long都存不下 對於ab c 1.首先我們將b分解成如下表示 b b0 b1 21 bn 2n 其中的 b0,b1,bn 指的是對應b的二進位制表示法中對應位置的取值,1或者0 比如 6 110 b0 0,b1 1,b2 1 則ab可以表示...
快速冪取模演算法
演算法1 int ans 1 for int i 1 i b i ans ans c 可以對a關於c取餘,這樣可以大大減少a的大小 演算法2int ans 1 a a c 加上這一句 for int i 1 i b i ans ans c 既然某個因子取餘之後相乘再取餘保持餘數不變,ans也可以進行...