51nod 1228、1258 序列求和
这里一次讲两题...貌似都是板子?
所以两题其实可以一起做 【雾
noteskey
总之就是伯努利数的两道入门题啦,就是第二道有点鬼畜了,居然要任意模数的!(好吧是 1e9+7 但也没什么区别了)
伯努利数学习可以看这里
第二题的式子其实学习笔记里已经有写了...这里就再推一遍吧~(不然没什么好写的呢)
注意下面的伯努利数 \(B\) 用的是 \(B^+\) 伯努利
\[\begin{aligned} ANS=&S(n,k) \\=& {1\over k+1} \sum_{i=0}^k \begin{pmatrix} k+1\\i \end{pmatrix} B_i ~· n^{k+1-i} \\=& k! \sum_{i=0}^k {B_i\over i!} ~· {n^{k+1-i}\over (k+1-i)! }\end{aligned}\]
然后后面的式子一眼卷积,一遍...咳咳...一遍 MTT 出解...
code
然后第一题其实可以暴力做的...但是反正第二题也是要打的,还打个 P 的题 1 暴力,当然是两题一起肝
所以代码只给第二道题的(虽说两道都能 A )... MTT 就抄个板子好了,我是不来再打一遍的,打错还得调半天 XD
//by Judge #include<bits/stdc++.h> #define Rg register #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i) #define ll long long #define db double using namespace std; const db PI=acos(-1); const int mod=1e9+7; const int bl=32768; const int M=5e5+3; typedef int arr[M]; #ifndef Judge #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) #endif char buf[1<<21],*p1=buf,*p2=buf; inline bool cmax(int& a,int b){return a<b?a=b,1:0;} inline bool cmin(int& a,int b){return a>b?a=b,1:0;} inline int mul(int x,int y){return 1ll*x*y%mod;} inline int dec(int x,int y){return x<y?x-y+mod:x-y;} inline int inc(int x,int y){return x+y>=mod?x+y-mod:x+y;} inline ll read(){ ll x=0,f=1; char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } char sr[1<<21],z[20];int CCF=-1,Z; inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;} inline void print(int x,char chr='\n'){ if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x; while(z[++Z]=x%10+48,x/=10); while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr; } int n,k,now,ans,d,limit; arr fac,inv,ifac,B,r,lg; db iv[M]; inline int qpow(int x,int p=mod-2,int s=1){ for(;p;p>>=1,x=mul(x,x)) if(p&1) s=mul(s,x); return s; } struct cp{ db x,y; cp(db _x,db _y=0){x=_x,y=_y;} cp(){} cp operator +(const cp& b)const{return cp(x+b.x,y+b.y);} cp operator -(const cp& b)const{return cp(x-b.x,y-b.y);} cp operator *(const cp& b)const{return cp(x*b.x-y*b.y,x*b.y+y*b.x);} cp operator *(const db& b)const{return cp(x*b,y*b);} cp operator ~()const{return cp(x,-y);} }w[2][M],x,y; inline void prep(){ for(;1<<d<limit;++d); fp(i,0,d) lg[1<<i]=i,iv[i]=(db)1.0/(1<<i); fp(i,1,limit-1) r[i]=(r[i>>1]>>1)|((i&1)<<(d-1)); for(int i=1,d=0;i<limit;i<<=1,++d) fp(k,0,i-1){ w[1][i+k]=cp(cos(PI*k*iv[d]),sin(PI*k*iv[d])); w[0][i+k]=cp(cos(PI*k*iv[d]),-sin(PI*k*iv[d])); } } inline void FFT(cp* a,int tp){ fp(i,0,limit-1) if(i<r[i]) swap(a[i],a[r[i]]); for(int mid=1;mid<limit;mid<<=1) for(int j=0;j<limit;j+=mid<<1) for(int k=0;k<mid;++k) x=a[j+k],y=w[tp][mid+k]*a[j+k+mid],a[j+k]=x+y,a[j+k+mid]=x-y; if(!tp) fp(i,0,limit-1) a[i]=a[i]*iv[d]; } inline void MTT(int* a,int* b,int* c,int n){ static cp f[M],g[M],p[M],q[M]; fp(i,0,n) f[i]=cp(a[i]>>15,a[i]&32767),g[i]=cp(b[i]>>15,b[i]&32767); fp(i,n+1,limit-1) f[i]=g[i]=cp(0,0); prep(),FFT(f,1),FFT(g,1); fp(i,0,limit-1){ cp t,f0,f1,g0,g1; t=~f[i?limit-i:0],f0=(f[i]-t)*cp(0,-0.5),f1=(f[i]+t)*0.5, t=~g[i?limit-i:0],g0=(g[i]-t)*cp(0,-0.5),g1=(g[i]+t)*0.5; p[i]=f1*g1,q[i]=f1*g0+f0*g1+f0*g0*cp(0,1); } FFT(p,0),FFT(q,0); fp(i,0,n) c[i]=(((ll)(p[i].x+0.5)%mod<<30)+((ll)(q[i].x+0.5)<<15)+((ll)(q[i].y+0.5)))%mod; } inline void get_inv(int* a,int* b,int n){ static arr c,d; if(n==1) return b[0]=qpow(a[0]),void(); get_inv(a,b,n>>1); int len=-1; for(limit=1;limit<=n;limit<<=1) ++len; fp(i,0,limit-1) r[i]=(r[i>>1]>>1)|((i&1)<<len); MTT(a,b,c,n),MTT(c,b,d,n); fp(i,0,n-1) b[i]=dec(inc(b[i],b[i]),d[i]); } inline void prep(int len){ inv[0]=inv[1]=ifac[0]=ifac[1]=fac[0]=fac[1]=1; fp(i,2,len) fac[i]=mul(fac[i-1l],i), inv[i]=mul(mod-mod/i,inv[mod%i]), ifac[i]=mul(ifac[i-1],inv[i]); get_inv(ifac+1,B,len<<1); B[1]=mod-B[1]; fp(i,0,len) B[i]=mul(B[i],fac[i]); } inline int C(int n,int m){return mul(fac[n],mul(ifac[m],ifac[n-m]));} int main(){ prep(65536); for(int T=read();T;--T,print(mul(ans,inv[k+1]))){ n=read()%mod,k=read(),ans=0; now=1; fd(i,k,0) now=mul(now,n),ans=inc(ans,mul(C(k+1,i),mul(B[i],now))); } return Ot(),0; }
cpp
51nod 1228、1258 序列求和的更多相关文章
- 51nod 1258 序列求和 V4
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4 基准时间限制:8 秒 空间限制:131 ...
- 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 ...
- 【51nod】1822 序列求和 V5
题解 我是zz吧 nonprime[i * prime[j]] = 0 = = 还以为是要卡常,卡了半天就是过不掉 我们来说这道题-- 首先,我们考虑一个\(K^2\)做法 \(f_{k}(N) = ...
- 51nod 1228 序列求和(伯努利数)
1228 序列求和 题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 T(n) = n^k,S(n) = T(1 ...
- 【51Nod1258】序列求和V4(FFT)
[51Nod1258]序列求和V4(FFT) 题面 51Nod 多组数据,求: \[Ans=\sum_{i=1}^ni^k,n\le 10^{18},k\le50000\] 题解 预处理伯努利数,时间 ...
- HDU 5358 First One 求和(序列求和,优化)
题意:给定一个含n个元素的序列,求下式子的结果.S(i,j)表示为seq[i...j]之和.注:对于log20可视为1.数据量n<=105. 思路:即使能够在O(1)的时间内求得任意S,也是需要 ...
- HDU 2254 奥运(矩阵高速幂+二分等比序列求和)
HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意: 中问题不解释. 分析: 依据floyd的算法,矩阵的k次方表示这个矩阵走了k步. 所以k ...
- 51nod_1236_序列求和 V3 _组合数学
51nod_1236_序列求和 V3 _组合数学 Fib(n)表示斐波那契数列的第n项,Fib(n) = Fib(n-1) + Fib(n-2).Fib(0) = 0, Fib(1) = 1. (1, ...
- HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)
HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意: g(i)=k*i+b;i为变量. 给出 ...
随机推荐
- 将arguments转换成数组的方法
将函数里的arguments,转换成一个真正的数组的方法,arguments是个类数组,除了有实参所组成的类似数组以外,还有自己的属性,如callee,arguments.callee就是当前正在执行 ...
- openstack第四章:neutron— 网络服务
第四篇neutron— 网络服务 一.neutron 介绍: Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是 ...
- 封装的通过微信JS-SDK实现自定义分享到朋友圈或者朋友的ES6类!
引言: 我们经常在做微信H5的过程中需要自定义分享网页,这个如何实现呢?请看如下的封装的ES6类及使用说明! /** * @jssdk js对象,包括appId,timestamp,nonceStr, ...
- webservice异常
webservice的一个常见异常: [SOAPException: faultCode=SOAP-ENV:Client; msg=Error parsing HTTP status line &qu ...
- springboot2.0整合shiro出现ShiroDialect报错 找不到org/thymeleaf/processor/attr/AbstractTextChildModifierAttrPr
包版本过低,找最新包 https://mvnrepository.com/ <dependency> <groupId>com.github.theborakompanioni ...
- linux 命令mkdir、cd
mkdir 创建文件夹 -p 递归创建文件夹 可以一次性创建多个目录 cd pwd 显示当前目录的绝对路径 rmdir 删除空目录 只能删除空目录 鸡肋,基本用rm cp 复制文件产品 -r ...
- cas单点登录-https的配置(一)
前言 由于个人的兴趣和为了加薪,在这里研究下cas单点登录,同时也记录下自己探索的过程,希望也能帮到有同样兴趣的小伙伴 环境 CAS-5.1.3 tomcat8.5 jdk8 centos6.5 ...
- Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】问题调查
今天测试反应了一个问题,说接口返回的速度变慢了,并且返回的数据也不对.然后就找到了我o(╥﹏╥)o. 第一个反应就是查日志,不查不要紧,一查吓一跳,整个服务器上所有的站点都报错了.异常信息如下: Sy ...
- Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署
渐进式交付是持续交付的下一步, 它将新版本部署到用户的一个子集,并在将其滚动到全部用户之前对其正确性和性能进行评估, 如果不匹配某些关键指标,则进行回滚. 这里有一些有趣的项目,使得渐进式交付在 Ku ...
- IIS虚拟目录内的视频文件访问出错:HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开.多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式. 我是 ...