hdu 5793 A Boring Question (快速幂+逆元)(规律题)

本文介绍了一种计算等比数列前n+1项和的高效算法,通过快速幂运算和逆元求解,实现了对大规模数据的快速处理。代码采用C++实现,适用于竞赛编程和大数据处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方推导公式:

0k1,k2,kmn1j<m(kjkj+1) =\sum_{0\leq k_{1}\leq k_{2}\leq\cdots \leq k_{m}\leq n}\prod_{1\leq j< m}\binom{k_{j+1}}{k_{j}}

=0k1k2kmn1j<m(kjkj+1) =\sum_{k_{m}=0}^{n}\sum_{k_{m-1}=0}^{k_{m}}\cdots \sum_{k_{1}=0}^{k_{2}}\prod_{1\leq j< m}\binom{k_{j+1}}{k_{j}}

=km=0nkm1=0kmk1=0k21j<m(kjkj+1) =\sum_{k_{m}=0}^{n}\left { \binom{k_{m}}{k_{m-1}} \sum_{k_{m-1}=0}^{k_{m}} \left { \binom{k_{m-1}}{k_{m-2}} \cdots \sum_{k_{1}=0}^{k_{2}}\binom{k_{2}}{k_{1}} \right } \right }

=km=0n{(km1km)km1=0km{(km2km1)k1=0k2(k1k2)}}

 =\sum_{k_{m}=0}^{n}\left { \binom{k_{m}}{k_{m-1}} \sum_{k_{m-1}=0}^{k_{m}} \left { \binom{k_{m-1}}{k_{m-2}} \cdots \sum_{k_{1}=0}^{k_{2}}\binom{k_{2}}{k_{1}} \right } \right }=km=0n{(km1km)km1=0km{(km2km1)k1=0k2(k1k2)}} =\sum_{k_{m}=0}^{n}\left { \binom{k_{m}}{k_{m-1}} \sum_{k_{m-1}=0}^{k_{m}} \left { \binom{k_{m-1}}{k_{m-2}} \cdots \sum_{k_{2}=0}^{k_{3}}\binom{k_{3}}{k_{2}}2^{k_{2}} \right } \right }

=km=0n{(km1km)km1=0km{(km2km1)k2=0k3(k2k3)2k2}} =\sum_{k_{m}=0}^{n}m^{k_{m}}

=km=0nmkm =\frac{m^{n+1} - 1}{m - 1}

=m1mn+11

 

自己找的规律是求:ans=m^0+m^1+m^2+...+m^n,也就是等比数列的前n+1项和

/*by*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const LL N=2010;
const LL mod=1000000007;
const LL INF=0x3f3f3f;
LL quickpow(LL m, LL n)
{
    LL b = 1;
    while(n > 0) {
        if(n & 1)
            b = (b * m) % mod;
        n = n >> 1 ;
        m = (m * m) % mod;
    }
    return b;
}
int main()
{
    int T;
    cin>>T;
    while(T--) {
        LL n,m;
        scanf("%lld%lld",&n,&m);
        LL ans=0;
        ans=quickpow(m,n+1)-1;
        ans=ans*quickpow(m-1,mod-2)%mod;/*求逆元*/
        printf("%lld\n",ans%mod);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/yu0111/p/5740013.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值