zoukankan      html  css  js  c++  java
  • 求自然数幂和 B

    题解:

    很多方法

    斯特林数推导略麻烦但是不依赖于模数

    代码:

    拉格朗日插值

    由于可以证明这是个K+1次多项式于是可以直接用插值

    #include <bits/stdc++.h>
    using namespace std;
    const int mo=1e9+7;
    #define IL inline
    #define ll long long
    #define rint register int
    #define rep(i,h,t) for (rint i=h;i<=t;i++)
    #define dep(i,t,h) for (rint i=t;i>=h;i--) 
    const int N=2e6;
    ll f[N],jc[N];
    ll fst(ll x,ll y)
    {
      if (y==0) return(1);
      if (y==1) return(x);
      ll kk=fst(x,y/2);
      kk=(kk*kk)%mo;
      if (y%2) kk=(kk*x)%mo;
      return kk;
    }
    int main()
    {
      freopen("1.in","r",stdin);
      freopen("1.out","w",stdout);
      ios::sync_with_stdio(false); 
      ll n,k;
      cin>>n>>k;
      rep(i,1,k+2)
        f[i]=(f[i-1]+fst(i*1ll,k))%mo;
      if (n<=k+2)
      {
        cout<<f[n]<<endl;
        return 0;
      }
      jc[0]=1;
      rep(i,1,k+2) jc[i]=(jc[i-1]*i)%mo;
      ll now=1,ans=0;
      rep(i,1,k+2) now=(now*(n-i))%mo;
      rep(i,1,k+2)
      {
        ll inv1=fst(n-i,mo-2);
        ll inv2=fst((jc[i-1]*jc[k+2-i])%mo,mo-2)%mo;
        ll sign=(k+2-i)%2?-1:1;
        ans=(ans+sign*inv1*inv2%mo*f[i]%mo*now%mo)%mo;
      }
      cout<<(ans+mo)%mo;
      return 0;
    }
  • 相关阅读:
    redis集群
    鉴权方案选择
    spring mvc 自定义handler不拦截静态资源
    servlet3
    压测工具 ab jmeter
    死锁产生的原因
    缓存方案:本地guavaCache, 远程redis?
    使用spring boot admin
    groovy使用小记
    python--面试题01
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9381963.html
Copyright © 2011-2022 走看看