数学推导题,NTT,快速数论变换,Wannafly-导数卷积

导数卷积


题目描述

在这里插入图片描述

题解

参考了一下标程的推导过程,因为这个推导对我这种数学弱渣真的有点难鸭.

[1]f(x)f(x)f(x)iii次导函数:

f(i)(x)=ai∗i!0!+ai+1∗(i+1)!1!∗x1+...+an−1∗(n−1)!(n−1−i)!∗xn−1−if^{(i)}(x) = a_{i}*\frac{i!}{0!} + a_{i+1}*\frac{(i+1)!}{1!}*x^{1} +...+a_{n-1}*\frac{(n-1)!}{(n-1-i)!}*x^{n-1-i}f(i)(x)=ai0!i!+ai+11!(i+1)!x1+...+an1(n1i)!(n1)!xn1i

[2]f(x)f(x)f(x)n−i−1n-i-1ni1次导函数:

f(n−i−1)(x)=an−i−1∗(n−1−i)!0!+an−i∗(n−i)!1!∗x1+...+an−1∗(n−1)!i!∗xif^{(n-i-1)}(x) = a_{n-i-1}*\frac{(n-1-i)!}{0!} + a_{n-i}*\frac{(n-i)!}{1!}*x^{1} +...+a_{n-1}*\frac{(n-1)!}{i!}*x^{i}f(ni1)(x)=ani10!(n1i)!+ani1!(ni)!x1+...+an1i!(n1)!xi

对于积式f(i)(x)f(n−1−i)(x)f^{(i)}(x)f^{(n-1-i)}(x)f(i)(x)f(n1i)(x)结果中,次数为ddd的项xdx^dxd前的系数应该是:

∑t=0dai+t∗(i+t)!t!∗an−i−1+(d−t)∗(n−i−1+(d−t))!(d−t)!\sum_{t = 0}^{d}a_{i+t}*\frac{(i+t)!}{t!}*a_{n-i-1+(d-t)}*\frac{(n-i-1+(d-t))!}{(d-t)!}t=0dai+tt!(i+t)!ani1+(dt)(dt)!(ni1+(dt))!

Fi=ai∗i!F_i = a_i * i!Fi=aii!

换种写法:

∑t=0dFi+t∗1t!∗Fn−1+d−(i+t)∗1(d−t)!\sum_{t = 0}^{d}F_{i+t}*\frac{1}{t!}*F_{n-1+d-(i+t)}*\frac{1}{(d-t)!}t=0dFi+tt!1Fn1+d(i+t)(dt)!1

对所有的积式求和得到:

∑i=0n−1∑t=0dFi+t∗1t!∗Fn−1+d−(i+t)∗1(d−t)!\sum_{i= 0}^{n-1}\sum_{t = 0}^{d}F_{i+t}*\frac{1}{t!}*F_{n-1+d-(i+t)}*\frac{1}{(d-t)!}i=0n1t=0dFi+tt!1Fn1+d(i+t)(dt)!1

=∑i=0n−1+dFi∗Fn−1+d−i∗∑j=0d1j!(d−j)!=\sum^{n-1+d}_{i=0}F_{i}*F_{n-1+d-i}*\sum^{d}_{j=0}\frac{1}{j!(d-j)!}=i=0n1+dFiFn1+dij=0dj!(dj)!1

在上个式子中必须要满足n−1+d−i≤n−1n-1+d-i \le n-1n1+din1, 即,d≤id \le idi ,不然Fn−1+d−iF_{n-1+d-i}Fn1+di将变成000,不过对答案没有影响.

jjj的取值范围是j:[0,min(d,i)]j:[0,min(d,i)]j:[0,min(d,i)],也就是j:[0,d]j:[0,d]j:[0,d].

因此上个式子就是,

=∑i=0n−1+dFi∗Fn−1+d−i∗2dd!=2dd!∗∑i=0n−1+dFi∗Fn−1+d−i=\sum^{n-1+d}_{i=0}F_{i}*F_{n-1+d-i}*\frac{2^d}{d!} = \frac{2^d}{d!} *\sum^{n-1+d}_{i=0}F_{i}*F_{n-1+d-i}=i=0n1+dFiFn1+did!2d=d!2di=0n1+dFiFn1+di

对后面的部分∑i=0n−1+dFi∗Fn−1+d−i\sum^{n-1+d}_{i=0}F_{i}*F_{n-1+d-i}i=0n1+dFiFn1+di直接套用NTTNTTNTT来求就可以了.

代码

#include <iostream>
#include <cstring>
#include <cstdio>using namespace std;
#define rep(i,a,b) for(int i = a;i <= b;++i)
typedef long long LL;
const int N = 1 << 20;
const int P = 998244353;
const int G = 3;
const int NUM = 20;LL  wn[NUM];
LL  a[N], b[N];LL quick_mod(LL a, LL b, LL m)
{LL ans = 1;a %= m;while(b){if(b & 1){ans = ans * a % m;b--;}b >>= 1;a = a * a % m;}return ans;
}void GetWn()
{for(int i = 0; i < NUM; i++){int t = 1 << i;wn[i] = quick_mod(G, (P - 1) / t, P);}
}
void Rader(LL a[], int len)
{int j = len >> 1;for(int i = 1; i < len - 1; i++){if(i < j) swap(a[i], a[j]);int k = len >> 1;while(j >= k){j -= k;k >>= 1;}if(j < k) j += k;}
}void NTT(LL a[], int len, int on)
{Rader(a, len);int id = 0;for(int h = 2; h <= len; h <<= 1){id++;for(int j = 0; j < len; j += h){LL w = 1;for(int k = j; k < j + h / 2; k++){LL u = a[k] % P;LL t = w * a[k + h / 2] % P;a[k] = (u + t) % P;a[k + h / 2] = (u - t + P) % P;w = w * wn[id] % P;}}}if(on == -1){for(int i = 1; i < len / 2; i++)swap(a[i], a[len - i]);LL inv = quick_mod(len, P - 2, P);for(int i = 0; i < len; i++)a[i] = a[i] * inv % P;}
}void Conv(LL a[], LL b[], int n)
{NTT(a, n, 1);NTT(b, n, 1);for(int i = 0; i < n; i++)a[i] = a[i] * b[i] % P;NTT(a, n, -1);
}
int n;
LL Fac[N],iFac[N];
int main()
{GetWn();Fac[0] = 1;rep(i,1,N-1) Fac[i] = Fac[i-1] * i % P;rep(i,0,N-1)iFac[i] = quick_mod(Fac[i],P-2,P);ios::sync_with_stdio(false);cin >> n;rep(i,0,n-1) {std::cin >> a[i];a[i] = b[i] = a[i] * Fac[i] % P;}int len = 1;while(len < n) len <<= 1;len <<= 1;Conv(a,b,len);rep(i,0,n-1) {std::cout << a[n-1+i] * quick_mod(2,i,P) % P * iFac[i] % P << " ";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 C# 代码实现拓扑排序

0.参考资料尊重他人的劳动成果&#xff0c;贴上参考的资料地址&#xff0c;本文仅作学习记录之用。https://www.codeproject.com/Articles/869059/Topological-sorting-in-Csharphttps://songlee24.github.io/2015/05/07/topological-sorting/https://www.cnblogs.com/skywang1…

ASP.NET Core 2.1带来SignalR、Razor类库

随着.NET Core 2.1的发布&#xff0c;微软推出了 ASP.NET Core 2.1。这是一个强大的版本&#xff0c;包括实时通信库SignalR&#xff0c;更新的模板使GDPR更容易遵守&#xff0c;并且针对Angular、React&#xff0c;以及React Redux更新了SPA模板。在2013年发布传统的ASP.NET时…

针对ASP.NET Core Web API的先进架构

.NET Core 最初是在2016年发布的&#xff0c;随着.NET Core 2.0的发布&#xff0c;微软拥有了下一个通用、模块化、跨平台和开源的平台主版本。.NET Core已经创建了许多API&#xff0c;在当前版本的.net框架中均可用。它最初是为下一代ASP.NET解决方案而创建的&#xff0c;但现…

ASP.NET Core 2.1 使用Docker运行

1.新建一个 ASP.NET Core 2.1 项目然后运行一下项目&#xff0c;确保我们刚刚建立的项目可以正常运行。2.编写 Dockerfile新建一个文本文件&#xff0c;命名为 DockerfileFROM microsoft/dotnet:2.1-aspnetcore-runtimeWORKDIR /appCOPY . .EXPOSE 80ENTRYPOINT ["dotnet&…

【DP】和谐的奶牛(jzoj 1750)

和谐的奶牛 题目大意&#xff1a; 有一些括号&#xff08;保证是合法的&#xff0c;合法&#xff1a;每一个左括号都有自己配对的有括号&#xff09;&#xff0c;现在要将这些括号分为两组&#xff08;其中一组可以为空&#xff09;&#xff0c;分完组后括号的顺序要和原来的…

费用流-Wannafly Day2 TwoGraph-神题

TwoGraph 题意 题解 这真是一道神题,这题有两点比较难想,其中第一点是最难想的. 我们先考虑只有一张图的情况. 性质: [1]如果给每个点匹配一条边,形成一个(点,边)(点,边)(点,边)对,其中点不能重复出现,边也不能重复出现.那么这些对形成的图的联通块要么是树,要么是环套树. 证…

ASP.NET Core Web API 与 SSL

SSL一直没有真正研究过SSL&#xff0c;不知道下面的理解是否正确。SSL是Secure Sockets Layer的缩写&#xff0c;它用来保护服务器和客户端之前的通信。它是基于信任加密的概念。在介绍SSL的原理之前&#xff0c;首先介绍一下加密&#xff08;Encryption&#xff09;的概念。刷…

【模拟】聊天服务器的外部流量

聊天服务器的外部流量 题目大意&#xff1a; 有一个通讯系统&#xff0c;可以将某人邀请进来&#xff08;name&#xff09;&#xff0c;也可以将某人T出去&#xff08;-name&#xff09;&#xff0c;也可以向群中的所有人发一条信息&#xff08;name&#xff1a;…&#xff0…

GitHub宣布GitHub Education 新计划,学校可免费用企业版

今天 GitHub 宣布面向所有学校和教育机构开放 GitHub Education&#xff0c;方便学生和老师免费使用 GitHub 企业版功能&#xff0c;以及学生开发者工具包、GitHub 教室、培训等资源。2014 年&#xff0c;GitHub 推出了学生开发者工具包&#xff0c;其中包括 Azure 等云服务、G…

【dfs】聚会

聚会 题目大意&#xff1a; 有一些树&#xff0c;求深的树的深度 原题 解题思路&#xff1a; 从一个根出发&#xff0c;dfs往下搜 代码&#xff1a; #include<cstdio> #include<iostream> #include<cstring> using namespace std; int n,t,g,w,ans,c[2…

2018 大湾区(深圳) .NET技术分享交流会 第一期

.NET Core 2.1 已于2018年5月30日正式发布&#xff0c;邀请粤港澳大湾区.NET技术专家和从业人员&#xff0c;一起分享与交流.NET技术的发展方向&#xff0c;提高粤港澳大湾区.NET技术交流氛围&#xff0c;挖掘.NET高级人才&#xff0c;为改善.NET生态系统贡献力量&#xff0c;使…

卡车

卡车 题目大意&#xff1a; 有一个卡车向里面放东西&#xff08;重量要么是一要么是二&#xff09;&#xff0c;价值不同&#xff0c;放的东西的价值之和最大是多少 原题&#xff1a; 解题思路&#xff1a; 看看数据就知道DP会MLE&#xff0c;所以要用排序来做&#xff0c;…

从明面上学习ASP.NET Core

一、前言这篇文章就是从能看到地方去学习Core&#xff0c;没有很深奥&#xff0c;也没有很难懂&#xff0c;现在我们开始吧。二、构建项目&#xff0c;引发思考创建项目的步骤真的很简单&#xff0c;你要是不会&#xff0c;我真也没法了&#xff0c;我这是创建的MVC的项目。接下…

线段树-区间的交

区间的交 题目来源 孙耀峰Segment_Tree.pdf 原创 题目描述 给定nnn个区间,[li,ri][l_i,r_i][li​,ri​],可以选出其中一些区间,设选出tottottot个,令xxx表示这tottottot个区间交的长度.求min{x,tot}min\{x,tot\}min{x,tot}n≤105,1≤xi≤yi≤nn \le 10^5,1 \le x_i \le y_i…

【DP】收银员

收银员 题目大意&#xff1a; 有n件物品&#xff0c;每件物品有他的扫描时间和价格&#xff0c;在扫描的时候可以偷物品&#xff08;一个单位时间偷一件&#xff09;&#xff0c;问最少给多少钱 原题&#xff1a; 解题思路&#xff1a; 设f[j]为偷或买共j件花的最少钱&…

.Net Core小技巧 - Swagger适配虚拟目录及二级目录

前言随着前后端分离模式与微服务架构的出现&#xff0c;Web API变得越来越重要及普遍。而后出现的网关技术&#xff0c;使开发者更倾向于使用二级/多级目录来暴露Web API&#xff0c;一是暴露的端口更少&#xff0c;方便管理&#xff1b;二是在网关中可以处理一些公共的事务&am…

好代码是管出来的——使用Git来管理源代码

软件开发过程中一个重要的产出就是代码&#xff0c;软件的编码过程一般是由一个团队共同完成&#xff0c;它是一个并行活动&#xff0c;为了保证代码在多人开发中能够顺利完成&#xff0c;我们需要使用代码版本控制工具来对代码进行统一存储&#xff0c;并追踪每一份代码的历史…

定时调度系列之Quartz.Net详解

一. 背景我们在日常开发中&#xff0c;可能你会遇到这样的需求&#xff1a;"每个月的3号给用户发信息&#xff0c;提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始化数据供其它业务使用…

RyuJIT的华丽转身

RyuJIT是作为.NET即时编译器的代号称谓&#xff0c;它是.NET运行时的基本组件之一。与此相反的是&#xff0c;Roslyn作为C#编译器&#xff0c;其编译C#代码成为IL字节码。然后&#xff0c;其再将IL字节码编译成相对于多种处理器的机器码。随着最近对dotnet/coreclr #18064的合并…

使用Nexus搭建私有Nuget仓库

前言Nuget是ASP .NET Gallery的一员&#xff0c;是免费、开源的包管理工具&#xff0c;专注于在.Net / .Net Core应用开发过程中第三方组件库的管理&#xff0c;相对于传统单纯的dll引用要方便、科学得多。其中nuget.org是最著名的Nuget公开库&#xff0c;但是企业内部开发的&a…