分治法求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=?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用分治法求众数

C语言分治法求最近对问题 运行一直报错 求高手修改

分治法

高斯消元法求逆矩阵

UOJ#347. WC2018通道(边分治)

NTT模板 神奇的迷宫 NTT加点分治