The Sum of the k-th Powers
慢慢推式子,顺便理清思路。
首先这个式子是一个
方便起见直接用
会发现
于是惊奇而又开心地发现分子分母都是等差数列,而且是连续整数的乘积。于是分别分析。分子部分:
可以考虑维护
于是就都可以预处理啦。
代码异常简洁(核心代码不到200字),跑得也很快。写得很顺,开心快乐。
#include<cstdio>
#define zczc
#define int long long
const int N=1000010;
const int mod=1e9+7;
inline void read(int &wh){
wh=0;int f=1;char w=getchar();
while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
while(w>='0'&&w<='9'){wh=wh*10+w-'0';w=getchar();}
wh*=f;return;
}
inline int pow(int s1,int s2){
if(s2==1)return s1;
if(s2==0)return 1;
int an=pow(s1,s2>>1);
if(s2&1)return an*an%mod*s1%mod;
else return an*an%mod;
}
int m,k,sum,ans,a[N],b[N],c[N];
signed main(){
#ifdef zczc
freopen("in.txt","r",stdin);
#endif
read(m);read(k);
a[0]=b[0]=c[k+3]=1;
for(int i=1;i<=k+2;i++)a[i]=a[i-1]*i%mod;
for(int i=1;i<=k+2;i++)b[i]=b[i-1]*(m-i)%mod;
for(int i=k+2;i;i--)c[i]=c[i+1]*(m-i)%mod;
for(int i=1;i<=k+2;i++){
sum+=pow(i,k);sum%=mod;
int u=b[i-1]*c[i+1]%mod;
int v=a[i-1]*a[k+2-i]*((k-i)%2?-1:1)%mod;
ans+=sum*u%mod*pow(v,mod-2)%mod;ans%=mod;
}
printf("%lld",(ans+mod)%mod);
return 0;
}
一如既往,万事胜意
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具