等比数列求和推导及优化

等比数列求和公式:这里写图片描述
推导:这里写图片描述
所以这里写图片描述
那么这里写图片描述
这里写图片描述
如果q==1就特判输出q*n

但是这样有一个缺点就是如果答案要取模,时间复杂度就会难以估计,有时就会变得很大,导致超时。

代码实现时间复杂度:O(log(n+1))

核心代码(取模)如下:

ans=qsm_(n,m+1)-1;//调快速幂
while (ans%(n-1)) ans+=tt;//取模后ans可能不可以被n-1整除,所以不停修正ans直到ans可以被n-1整除。
ans=(ans/(n-1))%tt;

=============================================================================

等比数列求和分治思想:
利用分治思想可以将等比数列求和在时间复杂度上变得更加稳定(无论是否取模),但是在不取模时,时间复杂度没有用公式快。
推导:设这里写图片描述
这里写图片描述
分类讨论:
n为奇数:这里写图片描述
n为偶数:这里写图片描述

上述答案调递归即可
所以答案就是这里写图片描述

代码实现时间复杂度:O(log(n)* log(n))

核心代码(取模)如下:

int dfs_(int x,int b)
{
    if (b==0) return 0;//0特判
    if (b==1) return x%tt;
    int sum=dfs_(x,b/2),tot=0;
    if (b&1) tot=qsm_(x,b);//奇偶性判断
    return (sum*(1+qsm_(x,b/2))%tt+tot)%tt;
}
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值