分治法求sum(a,b)=1+a+a^2+...+a^b=?
Posted mr94kevin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治法求sum(a,b)=1+a+a^2+...+a^b=?相关的知识,希望对你有一定的参考价值。
若b为奇数,则
sum(a,b)=1+a+a^2+...+a^b=(1+a+a^2+...+a^((b-1)/2))+(a^((b+1)/2)+...+a^b)=(1+a^((b+1)/2))*sum(a,(b-1)/2)
若b为偶数,则
sum(a,b)=(1+a^(b/2))*sum(a,b/2-1)+a^b
1 typedef long long ll; 2 3 ll qpow(ll a, ll b, ll p) { 4 ll ans = 1, x = a % p; 5 while (b) { 6 if (b & 1) ans = ans * x % p; 7 x = x * x % p, b >>= 1; 8 } 9 return ans; 10 } 11 12 ll sum(ll a, ll b, ll p) { 13 if (!b) return 1; 14 if (b & 1) 15 return (1 + qpow(a, (b + 1) / 2, p)) * sum(a, (b - 1) / 2, p) % p; 16 else 17 return ((1 + qpow(a, b / 2, p)) * sum(a, b / 2 - 1, p) % p + qpow(a, b, p)) % p; 18 }
以上是关于分治法求sum(a,b)=1+a+a^2+...+a^b=?的主要内容,如果未能解决你的问题,请参考以下文章