拉格朗日插值法板子(dls)
- namespace polysum {
- const int D=;
- ll a[D],f[D],g[D],p[D],p1[D],p2[D],b[D],h[D][],C[D];
- ll calcn(int d,ll *a,ll n) {//d次多项式(a[0-d])求第n项
- if (n<=d) return a[n];
- p1[]=p2[]=;
- rep(i,,d+) {
- ll t=(n-i+mod)%mod;
- p1[i+]=p1[i]*t%mod;
- }
- rep(i,,d+) {
- ll t=(n-d+i+mod)%mod;
- p2[i+]=p2[i]*t%mod;
- }
- ll ans=;
- rep(i,,d+) {
- ll t=g[i]*g[d-i]%mod*p1[i]%mod*p2[d-i]%mod*a[i]%mod;
- if ((d-i)&) ans=(ans-t+mod)%mod;
- else ans=(ans+t)%mod;
- }
- return ans;
- }
- void init(int M) {//初始化预处理阶乘和逆元(取模乘法)
- f[]=f[]=g[]=g[]=;
- rep(i,,M+) f[i]=f[i-]*i%mod;
- g[M+]=powmod(f[M+],mod-);
- per(i,,M+) g[i]=g[i+]*(i+)%mod;
- }
- ll polysum(ll n,ll *a,ll m) { // a[0].. a[m] \sum_{i=0}^{n-1} a[i]
- // m次多项式求第n项前缀和
- a[m+]=calcn(m,a,m+);
- rep(i,,m+) a[i]=(a[i-]+a[i])%mod;
- return calcn(m+,a,n-);
- }
- ll qpolysum(ll R,ll n,ll *a,ll m) { // a[0].. a[m] \sum_{i=0}^{n-1} a[i]*R^i
- if (R==) return polysum(n,a,m);
- a[m+]=calcn(m,a,m+);
- ll r=powmod(R,mod-),p3=,p4=,c,ans;
- h[][]=;h[][]=;
- rep(i,,m+) {
- h[i][]=(h[i-][]+a[i-])*r%mod;
- h[i][]=h[i-][]*r%mod;
- }
- rep(i,,m+) {
- ll t=g[i]*g[m+-i]%mod;
- if (i&) p3=((p3-h[i][]*t)%mod+mod)%mod,p4=((p4-h[i][]*t)%mod+mod)%mod;
- else p3=(p3+h[i][]*t)%mod,p4=(p4+h[i][]*t)%mod;
- }
- c=powmod(p4,mod-)*(mod-p3)%mod;
- rep(i,,m+) h[i][]=(h[i][]+h[i][]*c)%mod;
- rep(i,,m+) C[i]=h[i][];
- ans=(calcn(m,C,n)*powmod(R,n)-c)%mod;
- if (ans<) ans+=mod;
- return ans;
- }
- }
拉格朗日插值法板子(dls)的更多相关文章
- Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法
本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...
- 拉格朗日插值法——用Python进行数值计算
插值法的伟大作用我就不说了.... 那么贴代码? 首先说一下下面几点: 1. 已有的数据样本被称之为 "插值节点" 2. 对于特定插值节点,它所对应的插值函数是必定存在且唯一的(关 ...
- CPP&MATLAB实现拉格朗日插值法
开始学习MATLAB(R和Python先放一放...),老师推荐一本书,看完基础就是各种算法...首先是各种插值.先说拉格朗日插值法,这原理楼主完全不懂的,查的维基百科,好久才看懂.那里讲的很详细,这 ...
- codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法
题目链接 求sigma(i : 1 to n)i^k. 为了做这个题这两天真是补了不少数论, 之前连乘法逆元都不知道... 关于拉格朗日插值法, 我是看的这里http://www.guokr.com/ ...
- bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法
4559: [JLoi2016]成绩比较 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 261 Solved: 165[Submit][Status ...
- 集训DAYn——拉格朗日插值法
看zzq大佬的博客,看到了这个看似很深奥的东西,实际很简单(反正比FFT简单,我是一个要被FFT整疯了的孩子) 拉格朗日插值法 是什么 可以找到一个多项式,其恰好在各个观测点取到观测到的值.这样的多项 ...
- 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)
链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...
- 【BZOJ3453】XLkxc [拉格朗日插值法]
XLkxc Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定 k,a,n,d,p f(i ...
- Educational Codeforces Round 7 F. The Sum of the k-th Powers 拉格朗日插值法
F. The Sum of the k-th Powers 题目连接: http://www.codeforces.com/contest/622/problem/F Description Ther ...
随机推荐
- python-day29(正式学习)
目录 元类 什么是元类 为什么用元类 内置函数exec class创建类 type实现 自定义元类 _ _ call _ _ _ _ new _ _ 自定义元类控制的实例化 属性查找顺序 元类 警告! ...
- 2019最新的IDEA的激活方式!!!
第一步: 安装IDEAhttps://www.jetbrains.com/idea/ 选择要下载的版本Ultimate 第二步: 下载破解补丁链接:https://pan.baidu.com/s/1j ...
- 【Java】Java程序报错:EXCEPTION_ACCESS_VIOLATION (0xc0000005)
运行Java程序的时候,报错:EXCEPTION_ACCESS_VIOLATION (0xc0000005): 根据原网页的说明: EXCEPTION_ACCESS_VIOLATION In rare ...
- javaScript中 数组的新方法(reduce)
定义和用法 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. 注意: redu ...
- Centos7.0 三种网络适配器
VMnet0:桥接模式 VMnet1:主机模式 VMnet8:NAT模式 VMware Network Adepter VMnet1:宿主Host用于与 主机模式 虚拟网络进行通信的虚拟网卡 VMwa ...
- 如何删掉git版本库master分支的第一个commit
这个操作会将库清空,一般来说在建库开始的时候操作. 适用场景: git init初始化版本库之后,提交第一个点之后发现这个点出问题了,但是此时内心如果有洁癖的话, 你会觉得不完美,很想把这个点干掉重来 ...
- deep_learning_Function_tf.add()、tf.subtract()、tf.multiply()、tf.div()
tf.add().tf.subtract().tf.multiply().tf.div()函数介绍和示例 1. tf.add() 释义:加法操作 示例: x = tf.constant(2, dtyp ...
- 微软内部封杀 Slack
就在 Slack 在股市上亮相之际,有一家大公司却不允许员工在日常工作中使用这款企业协作和聊天应用软件. 微软已禁止其 100000 多名员工使用免费版 Slack.IT 外媒 GeekWire 报道 ...
- awk处理实记
经grep日志后得到的数据格式如下: } . [debug][-- ::] SendDataStyled:{ , "innings" : "6189269620_0007 ...
- MVC中 global.asax
MVC框架下 global.asax 页面的事件 这些事件被触发的 顺序是: Application_BeginRequest Application_AuthenticateRequest Appl ...