指數取模演算法

2022-05-11 11:43:03 字數 1055 閱讀 1592

題目:

給定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 #include5

using

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也可以進行...