题面

传送门

题解

这种颓柿子的题我可能死活做不出来……

首先\(r=0\)……算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\)

\[s_p=\sum_{i=1}^n i^pr^i
\]

我们要求的就是\(s_k\)

因为有

\[s_k=\sum_{i=1}^n i^kr^i
\]

\[rs_k=\sum_{i=2}^{n+1}r^{i}(i-1)^k
\]

两个柿子减一减

\[(r-1)s_k=r^{n+1}n^k-r+\sum_{i=2}^nr^i\left((i-1)^k-i^k\right)
\]

然后来考虑后面这个东西

\[\begin{aligned}
\sum_{i=2}^nr^i\left((i-1)^k-i^k\right)
&=\sum_{i=2}^nr^i\left(\sum_{j=0}^k{k\choose j}i^j(-1)^{k-j}-i^k\right)\\
&=\sum_{i=2}^nr^i\sum_{j=0}^{k-1}{k\choose j}i^j(-1)^{k-j}\\
&=\sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}\sum_{i=2}^nr^ii^j\\
&=\sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}\left(s(j)-r\right)\\
\end{aligned}
\]

那么就可以\(O(k^2)\)递推了

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=2005,P=1e9+7;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R ll y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
return res;
}
int fac[N],ifac[N],inv[N],Pre[N],suf[N],f[N],s[N];
ll n,r;int k,m;
inline int C(R int n,R int m){return 1ll*fac[n]*ifac[m]%P*ifac[n-m]%P;}
void init(int n=N-1){
inv[0]=inv[1]=ifac[0]=ifac[1]=fac[0]=fac[1]=1;
fp(i,2,n){
fac[i]=mul(fac[i-1],i),
inv[i]=mul(P-P/i,inv[P%i]),
ifac[i]=mul(ifac[i-1],inv[i]);
}
}
int Lagrange(){
n%=P;
fp(i,1,k+2)f[i]=add(f[i-1],ksm(i,k));
if(n<=k+2)return f[n];
m=k+2;
Pre[0]=1;fp(i,1,m)Pre[i]=mul(Pre[i-1],n-i);
suf[m+1]=1;fd(i,m,1)suf[i]=mul(suf[i+1],n-i);
int res=0,ty=(m-1)&1?P-1:1;
fp(i,1,m)res=add(res,1ll*f[i]*ty%P*Pre[i-1]%P*suf[i+1]%P*ifac[m-i]%P*ifac[i-1]%P),ty=P-ty;
return res;
}
int calc(){
if(!r)return 0;
R int p=ksm(r,n+1),q=1,invr=ksm(r-1,P-2),ty;
s[0]=mul(dec(p,r),invr),n%=P;
fp(i,1,k){
q=mul(q,n),s[i]=dec(mul(p,q),r),ty=(i&1)?P-1:1;
fp(j,0,i-1)s[i]=add(s[i],1ll*C(i,j)*ty%P*dec(s[j],r)%P),ty=P-ty;
s[i]=mul(s[i],invr);
}
return s[k];
}
int main(){
// freopen("testdata.in","r",stdin);
init();
int T;scanf("%lld",&T);
while(T--){
scanf("%lld%d%lld\n",&n,&k,&r),r%=P;
printf("%d\n",r==1?Lagrange():calc());
}
return 0;
}

[51nod]1229 序列求和 V2(数学+拉格朗日差值)的更多相关文章

  1. 51nod 1258 序列求和 V4

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4  基准时间限制:8 秒 空间限制:131 ...

  2. 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]

    1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...

  3. 51nod 1228 序列求和(伯努利数)

    1228 序列求和  题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 T(n) = n^k,S(n) = T(1 ...

  4. 51nod1229 序列求和 V2 【数学】

    题目链接 B51nod1229 题解 我们要求 \[\sum\limits_{i = 1}^{n}i^{k}r^{i}\] 如果\(r = 1\),就是自然数幂求和,上伯努利数即可\(O(k^2)\) ...

  5. 51nod1229 序列求和 V2

    这题...毒瘤吧,可能要写两份代码... 传送门 noteskey 我们考虑这里的复杂度肯定是与 k 相关的,而且平方也是没问题的,那么我们先看看 S(k) 能怎么得到: \[\begin{align ...

  6. 51Nod 1228 序列求和

    T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k,求S(n).   例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^ ...

  7. P5437-[XR-2]约定【拉格朗日差值,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 \(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\).随机选出一个生成树, ...

  8. [51nod 1822]序列求和

    \(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...

  9. 51nod 1228 序列求和 ( 1^k+2^k+3^k+...+n^k )

    C为组合数,B为伯努利数 具体推到过程略 参考博客:http://blog.csdn.net/acdreamers/article/details/38929067# (我的式子和博客中的不一样,不过 ...

随机推荐

  1. 2014.8.25 VS新建项目模板消失解决方法

    Vs2005 新建项目时windows应用程序模板消失问题解决方法: 1:进入C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\ ...

  2. 搜索——深度优先搜索(DFS)

    设想我们现在身处一个巨大的迷宫中,我们只能自己想办法走出去,下面是一种看上去很盲目但实际上会很有效的方法. 以当前所在位置为起点,沿着一条路向前走,当碰到岔道口时,选择其中一个岔路前进.如果选择的这个 ...

  3. Ubuntu下&nbsp;Nfs服务器安装

    Ubuntu Nfs服务器安装 nfs服务器在嵌入式开发中非常常用,可以实现主机和开发板共享文件.     1.安装软件包     sudo apt-get install nfs-common nf ...

  4. S3C6410移植u-boot

    1.首先下载u-boot(ftp://ftp.denx.de/pub/u-boot) wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 2 ...

  5. Vmware中的centos虚拟机克隆之后没有eth0

    克隆虚拟机之后,CentOS没有eth0的解决办法 我们常常需要从一台已经安装完成的虚拟机系统克隆出来一个新系统(克隆时候必须要改变网卡物理地址,这一点无需多说),但是新系统启动之后,会发现系统网络工 ...

  6. c++ 桥接模式(bridge)

    桥接模式的目的是分离抽象实现部分,把数据和实现分开,降低耦合.桥接模式和适配器模式不同之处是,桥接模式一般会在软件设计初考虑使用,适配器模式在软件设计之后为了实现接口兼容时使用. 下面是系统和电脑之间 ...

  7. IDEA02 利用Maven创建Web项目、为Web应用添加Spring框架支持、bean的创建于获取、利用注解配置Bean、自动装配Bean、MVC配置

    1 环境版本说明 Jdk : 1.8 Maven : 3.5 IDEA : 专业版 2017.2 2 环境准备 2.1 Maven安装及其配置 2.2 Tomcat安装及其配置 3 详细步骤 3.1 ...

  8. mybatis 框架 的应用之四(一对一 与 一对多)

    lf-driver=com.mysql.jdbc.Driver lf-url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&u ...

  9. lucene 第二天

    Lucene/Solr   第二天 1. 课程计划 Lucene的Field Lucene的索引库维护 lucene的查询 a) Query子对象 b) QueryParser Lucene相关度排序 ...

  10. SHELL读取 ini 格式文件做配置文件

    ini文件格式一般都是由节.键.值三部分组成 格式: [第一节 ] 第一个键 = 值 第二个键 = 第二个值 [第二节 ] 第一个键 = val1,val2,val3 例子: [COM] KINGGO ...