正题

题目链接:https://www.luogu.com.cn/problem/P6800


题目大意

给出一个\(n\)此多项式\(P\),对于\(k\in[0,m-1]\)所有的求\(P(c^k)\)

输出答案对\(998244353\)取模

\(1\leq n,m\leq 10^6\)


解题思路

\[g(n)=\sum_{i=0}^{n-1}a_ic^{i\times n}
\]

然后根据\(i\times n=\binom{i+n}{2}-\binom{i}{2}-\binom{n}{2}\)有

\[g(n)=c^{-\binom{n}{2}}\sum_{i=0}^{n-1}a_ic^{\binom{i+n}{2}}c^{-\binom{i}{2}}
\]

然后这是一个反着卷积的形式,直接上NTT就好了

时间复杂度\(O(n\log n)\)


code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define ll long long
  5. using namespace std;
  6. const ll N=4e6+10,P=998244353;
  7. ll n,m,c,a[N],r[N],F[N],G[N];
  8. ll power(ll x,ll b){
  9. ll ans=1;b%=P-1;
  10. while(b){
  11. if(b&1)ans=ans*x%P;
  12. x=x*x%P;b>>=1;
  13. }
  14. return ans;
  15. }
  16. ll C(ll n)
  17. {return n*(n-1)/2;}
  18. void NTT(ll *f,ll n,ll op){
  19. for(ll i=0;i<n;i++)
  20. if(i<r[i])swap(f[i],f[r[i]]);
  21. for(ll p=2;p<=n;p<<=1){
  22. ll tmp=power(3,(P+1)/p),len=p>>1;
  23. if(op==-1)tmp=power(tmp,P-2);
  24. for(ll k=0;k<n;k+=p){
  25. ll buf=1;
  26. for(ll i=k;i<k+len;i++){
  27. ll tt=f[i+len]*buf%P;
  28. f[i+len]=(f[i]-tt+P)%P;
  29. f[i]=(f[i]+tt)%P;
  30. buf=buf*tmp%P;
  31. }
  32. }
  33. }
  34. if(op==-1){
  35. ll invn=power(n,P-2);
  36. for(ll i=0;i<n;i++)
  37. f[i]=f[i]*invn%P;
  38. }
  39. return;
  40. }
  41. signed main()
  42. {
  43. scanf("%lld%lld%lld",&n,&c,&m);
  44. ll inv=power(c,P-2);
  45. for(ll i=0;i<n;i++)
  46. scanf("%lld",&a[i]);
  47. for(ll i=0;i<n+m;i++)
  48. F[i]=power(c,C(n+m-i-1));
  49. for(ll i=0;i<n;i++)
  50. G[i]=a[i]*power(inv,C(i))%P;
  51. ll len=1;
  52. while(len<n+m)len<<=1;
  53. for(ll i=0;i<len;i++)
  54. r[i]=(r[i>>1]>>1)|((i&1)?(len>>1):0);
  55. NTT(F,len,1);NTT(G,len,1);
  56. for(ll i=0;i<len;i++)F[i]=F[i]*G[i]%P;
  57. NTT(F,len,-1);
  58. for(ll i=n+m-1;i>=n;i--)
  59. printf("%lld ",F[i]*power(inv,C(n+m-i-1))%P);
  60. return 0;
  61. }

P6800-[模板]Chirp Z-Transform【NTT】的更多相关文章

  1. 洛谷P3803 【模板】多项式乘法 [NTT]

    题目传送门 多项式乘法 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1个数字, ...

  2. [洛谷P4245]【模板】任意模数NTT

    题目大意:给你两个多项式$f(x)$和$g(x)$以及一个模数$p(p\leqslant10^9)$,求$f*g\pmod p$ 题解:任意模数$NTT$,最大的数为$p^2\times\max\{n ...

  3. 洛谷.4238.[模板]多项式求逆(NTT)

    题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...

  4. DevExpress SpreadSheet报表模板设置 z

    DevExpres SpreadSheetControl报表模板设置,这一个还是挺牛逼的,字段绑定直接在单元格里面设置公式(=Field("字段名")),当然直接拖更方便, 跟xt ...

  5. Luogu 4245 【模板】任意模数NTT

    这个题还有一些其他的做法,以后再补,先记一下三模数$NTT$的方法. 发现这个题不取模最大的答案不会超过$10^5 \times 10^9 \times 10^9 = 10^{23}$,也就是说我们可 ...

  6. 洛谷4245:【模板】任意模数NTT——题解

    https://www.luogu.org/problemnew/show/P4245 给两个多项式,求其乘积,每个系数对p取模. 参考: 代码与部分理解参考https://www.luogu.org ...

  7. 洛谷 4245 【模板】任意模数NTT——三模数NTT / 拆系数FFT

    题目:https://www.luogu.org/problemnew/show/P4245 三模数NTT: 大概是用3个模数分别做一遍,用中国剩余定理合并. 前两个合并起来变成一个 long lon ...

  8. P4245 【模板】任意模数NTT

    Luogu4245 只要做三次的NTT,快的飞起 普通NTT,做9次 #include<cstdio> #include<cstring> #include<iostre ...

  9. 【模板】任意模数NTT

    题目描述: luogu 题解: 用$fft$水过(什么$ntt$我不知道). 众所周知,$fft$精度低,$ntt$处理范围小. 所以就有了任意模数ntt神奇$fft$! 意思是这样的.比如我要算$F ...

随机推荐

  1. 10、二进制安装K8s之部署CoreDNS 和Dashboard

    二进制安装K8s之部署CoreDNS 和Dashboard CoreDNS 和Dashboard 的yaml文件在 k8s源代码压缩包里面可以找到对应的配置文件,很多人从网上直接下载使用别人的,会导致 ...

  2. c++本地动态连接库代码

    c++本地动态连接库代码 1 #pragma once 2 #include "stdafx.h" 3 4 #ifdef PERSON_EXPORTS 5 #define PERS ...

  3. Quartz任务调度(4)JobListener分版本超详细解析

    JobListener 我们的jobListener实现类必须实现其以下方法: 方法 说明 getName() getName() 方法返回一个字符串用以说明 JobListener 的名称.对于注册 ...

  4. web整合Spring

    Spring整合Web开发 时间:2017-2-2 02:17 --导入jar包1.导入Spring开发基本jar包    spring-beans-3.2.0.RELEASE.jar     spr ...

  5. Linux centos 安装 ftp(Vsftp) 与 设置ftp(Vsftp)

    本文章只是简单搭建,因为公司只须要简单使用,虽然简单但是之前也走了一些弯路,所以决定把过程记录下来. 一.Vsftp安装与卸载 安装:yum install vsftpd 卸载:yum remove ...

  6. vue3.0入门(四):组件

    组件 组件基础 <my-counter></my-counter> const app = Vue.createApp({ // 根组件 data() { return {} ...

  7. roslaunch 启动时修改参数

    启动命令: roslaunch beginner_tutorials turtlemimic.launch arg1:=3.0 查询命令: rosparam get /param1 可以看到param ...

  8. git,github,webstrom配置

    在使用 WebStorm 上传本地项目到 GitHub 之前,先要做一些相关配置. 首先打开 WebStorm ,依次点击File -> Settings... 打开系统设置面板,在上面搜索 g ...

  9. ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1122)

    只需执行 /Applications/Python\ 3.9/Install\ Certificates.command

  10. C# 爬虫框架实现 概述

    目录: C# 爬虫框架实现 概述 C# 爬虫框架实现 流程_爬虫结构/原理 C# 爬虫框架实现 流程_各个类开发 C# 爬虫框架实现 流程_遇到的问题 C# 爬虫框架实现 后记 C#爬虫框架实现 源代 ...