hdu5793 A Boring Question

这个题的传送地址:http://acm.hdu.edu.cn/showproblem.php?pid=5793

题意很简单,大家看过即明白。这个题是关于二项式定理和推理的应用,可能是因为数学是对规律的把握,很多人都是直接打表找规律了。

0k1,k2,kmn1j<m(kj+1kj)=0k1k2kmn1j<m(kj+1kj)=km=0nkm1=0kmk1=0k21j<m(kj+1kj)=km=0n(kmkm1)km1=0km(km1km2)k1=0k2(k2k1)=km=0nkm1=0km(kmkm1)k2=0k3(k3k2)2k2=km=0nmkm=mn+11m1

这是我得到最后答案的步骤,其中第三个等号到第四个等号的转换用到的是二项式定理
2n=0knCkn

第三个等号到第四个等号的转换用到二项式推论
(1+x)n=k=0nCknxk

最后就得到最终的答案了。后面就是快速幂取余以及求逆元了。
以上是对此题的运算过程,如有问题欢迎指教。

#include<stdio.h>
#include<string.h>
#include<algorithm>

using namespace std;
typedef long long LL;
const LL mod = 1000000007;
LL pow(LL a,LL n)
{
    LL ans = 1;
    while(n)
    {
        if(n&1)
            ans = ans * a % mod;
        a = a * a % mod;
        n>>=1;
    }
    return ans;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        LL n,m;
        scanf("%lld%lld",&n,&m);
        LL ans =  pow(m,n+1);
        LL mod_ = pow(m-1,mod-2);
        printf("%lld\n",((ans-1)*mod_%mod+mod)%mod);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值