等比数列求和-分治法

等比数列求和-分治法

题目

(1+p+p2+...+pc)modB

因为等比数列直接用求和公式会出现分数形式,不能对分子和分母进行mod运算,再做除法
mod只对加、减、乘具有分配律

若 c为奇数

1+p+p2+...+pc

=1+p+p2+..+pc12+(pc+12+pc+32+...+pc)

=(1+p+p2+..+pc12+pc+12(1+p+p2+..+pc12)

=(1+pc+12)(1+p+p2+..+pc12)

=(1+pc+12)sum(p,c12)

若 c为偶数

1+p+p2+...+pc

=1+p+p2+..+pc21+(pc2+pc2+1+...+pc)

=(1+p+p2+..+pc21+pc2(1+p+p2+..+pc12)+pc

=(1+pc2)(1+p+p2+..+pc12)+pc

=(1+pc2)sum(p,c12)+pc

代码

ll ksm(ll a, ll b) {
    ll ans = 1;
    while(b) {
        if(b & 1) {
            ans *= a;
        }
        a *= a;
        b >>= 1;
    }
    return ans;
}

ll sum(ll a, ll b) {
    if(b == 0) return 1;
    if(b == 1) return a;
    if(b & 1) {
        return ((1 + ksm(a, (b + 1) / 2)) * sum(a, (b - 1) / 2));
    } else {
        return ((1 + ksm(a, b / 2) * sum(a, (b - 1) / 2)) + ksm(a, b));
    }
}
posted @   zhyyyyy115  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示