hdu5793 A Boring Question

来源:互联网 发布:网络写手赚钱吗 编辑:程序博客网 时间:2024/05/20 17:39

这个题的传送地址: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;}
0 0
原创粉丝点击