题目描述

  三倍经验题。

  给你\(n,m\),求

\[\sum_{i=1}^ni^mm^i
\]

  \(n\leq {10}^9,1\leq m\leq 500000\)

题解

  当\(m=1\)时\(ans=\frac{n(n+1)}{2}\)

  剩下的部分这篇博客有讲YWW's Blog

  时间复杂度:\(O(m+\log n)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll p=1000000007;
ll fp(ll a,ll b)
{
ll s=1;
for(;b;b>>=1,a=a*a%p)
if(b&1)
s=s*a%p;
return s;
}
int pri[100010];
int b[1000010];
int cnt;
ll s[1000010];
ll fac[1000010];
ll ifac[1000010];
ll inv[1000010];
ll f1[1000010];
ll f2[1000010];
ll f[1000010];
ll pre[1000010];
ll suf[1000010];
ll getc(int x,int y)
{
return fac[x]*ifac[y]%p*ifac[x-y]%p;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4126.in","r",stdin);
freopen("bzoj4126.out","w",stdout);
#endif
int n,m;
scanf("%d%d",&n,&m);
if(m==1)
{
printf("%lld\n",ll(n)*(n+1)/2%p);
return 0;
}
n++;
fac[0]=fac[1]=ifac[0]=ifac[1]=inv[1]=1;
for(int i=2;i<=m+2;i++)
{
inv[i]=-p/i*inv[p%i]%p;
ifac[i]=ifac[i-1]*inv[i]%p;
fac[i]=fac[i-1]*i%p;
}
s[0]=0;
s[1]=1;
for(int i=2;i<=m+2;i++)
{
if(!b[i])
{
s[i]=fp(i,m);
pri[++cnt]=i;
}
for(int j=1;j<=cnt&&i*pri[j]<=m+2;j++)
{
b[i*pri[j]]=1;
s[i*pri[j]]=s[i]*s[pri[j]]%p;
if(i%pri[j]==0)
break;
}
}
f1[0]=1;
f2[0]=0;
ll invm=fp(m,p-2);
for(int i=1;i<=m+1;i++)
{
f1[i]=f1[i-1]*invm%p;
f2[i]=(f2[i-1]+s[i-1])*invm%p;
}
ll v1=0,v2=0;
for(int i=0;i<=m+1;i++)
{
v1=(v1+((m+1-i)&1?-1:1)*getc(m+1,i)*f1[i])%p;
v2=(v2+((m+1-i)&1?-1:1)*getc(m+1,i)*f2[i])%p;
}
f[0]=-v2*fp(v1,p-2)%p;
for(int i=1;i<=m+1;i++)
f[i]=(f1[i]*f[0]+f2[i])%p;
if(n<=m+1)
{
ll ans=fp(m,n)*f[n]-f[0];
ans=(ans%p+p)%p;
printf("%lld\n",ans);
return 0;
}
for(int i=0;i<=m;i++)
{
pre[i]=n-i;
if(i)
pre[i]=pre[i-1]*pre[i]%p;
}
for(int i=m;i>=0;i--)
{
suf[i]=n-i;
if(i!=m)
suf[i]=suf[i+1]*suf[i]%p;
}
ll ans=0;
for(int i=0;i<=m;i++)
{
ll v=1;
if(i)
v=v*pre[i-1]%p;
if(i!=m)
v=v*suf[i+1]%p;
ans=(ans+f[i]*v%p*ifac[i]%p*ifac[m-i]%p*((m-i)&1?-1:1))%p;
}
ans=fp(m,n)*ans-f[0];
ans=(ans%p+p)%p;
printf("%lld\n",ans);
return 0;
}

【BZOJ4126】【BZOJ3516】【BZOJ3157】国王奇遇记 线性插值的更多相关文章

  1. bzoj3157: 国王奇遇记

    emmm...... 直接看题解好了: BZOJ-3157. 国王奇遇记 – Miskcoo's Space O(m)不懂扔掉 总之,给我们另一个处理复杂求和的方法: 找到函数之间的递推公式! 这里用 ...

  2. bzoj3157国王奇遇记(秦九韶算法+矩乘)&&bzoj233AC达成

    bz第233题,用一种233333333的做法过掉了(为啥我YY出一个算法来就是全网最慢的啊...) 题意:求sigma{(i^m)*(m^i),1<=i<=n},n<=10^9,m ...

  3. BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版

    令\[S_i=\sum_{k=1}^n k^i m^k\]我们有\[\begin{eqnarray*}(m-1)S_i & = & mS_i - S_i \\& = & ...

  4. 扰动法--*BZOJ3157: 国王奇遇记

    求$\sum_{i=1}^ni^mm^i$.$n \leq 1e9,m \leq 200$. 其实我也不知道这东西为啥叫“扰动法”,大概是在黑暗的边缘试探?就是那种,人家再多一点就被您看破了,然后您就 ...

  5. BZOJ3157 国王奇遇记——神奇的推式子

    先膜一发Miskcoo,大佬的博客上多项式相关的非常全 原题戳我 题目大意 求 \[\sum\limits_{i=1}^{n}i^mm^i\] 题解 设一个函数\(f(i)=\sum\limits_{ ...

  6. 【BZOJ3157/3516】国王奇遇记(数论)

    [BZOJ3157/3516]国王奇遇记(数论) 题面 BZOJ3157 BZOJ3516 题解 先考虑怎么做\(m\le 100\)的情况. 令\(f(n,k)=\displaystyle \sum ...

  7. 【BZOJ】【3157】&【BZOJ】【3516】国王奇遇记

    数论 题解:http://www.cnblogs.com/zhuohan123/p/3726933.html copy一下推导过程: 令$$S_i=\sum_{k=1}^{n}k^im^k$$ 我们有 ...

  8. BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)

    由二项式定理,(m+1)k=ΣC(k,i)*mi.由此可以构造矩阵转移,将mi*ik全部塞进去即可,系数即为组合数*m.复杂度O(m3logn),因为大常数喜闻乐见的T掉了. #include< ...

  9. bzoj3157 3516 国王奇遇记

    Description Input 共一行包括两个正整数N和M. Output 共一行为所求表达式的值对10^9+7取模的值. 特判m=1 m≠1时: 设S[u]=sigma(i^u*m^i) m*S ...

随机推荐

  1. OO博客作业1:第1-3周作业总结

    (1)基于度量来分析自己的程序结构 注:UML图中每个划分了的圆角矩形代表一个类或接口,箭头可代表创建.访问数据等行为.类的图形内部分为3个部分,从上到下依次是类的名称.类包含的实例变量(属性).类实 ...

  2. Leetcode 26. Remove Duplicates from Sorted Array (easy)

    Given a sorted array, remove the duplicates in-place such that each element appear only once and ret ...

  3. itoa()函数和atoi()函数详解

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整数转换为字符串的一个例子:# include <stdio.h># i ...

  4. H5 27-优先级之important

    27-优先级之important 我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  5. 使用faker去构造一个User-Agent

    faker可以仿造各种各样的信息,可以使用faker去构造一个User-Agent from faker import Factory f = Factory.create() 'User-Agent ...

  6. 多线程系列之四:Guarded Suspension 模式

    一,什么是Guarded Suspension模式如果执行现在的处理会造成问题,就让执行处理的线程等待.这种模式通过让线程等待来保证实例的安全性 二,实现一个简单的线程间通信的例子 一个线程(Clie ...

  7. MySQL之优化

    当 MySQL 单表记录数过大时,增删改查性能都会急剧下降,本文会提供一些优化参考,大家可以参考以下步骤来优化. 一. 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻 ...

  8. C# List用法 List介绍

    一.#List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList ...

  9. Laravel 服务容器、服务提供器、契约实例讲解

        前言 刚开始看laravel服务容器.契约.服务提供器的确生涩难懂,不单单是概念繁多,而且实际的demo很难找(找是找到了,但难用啊),最后就隔一段时间看一遍,大概个十来遍,还真给看出个门道, ...

  10. If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

    学习Spring Boot 过程中遇到了下列这个问题 Description: Failed to configure a DataSource: 'url' attribute is not spe ...