http://172.20.6.3/Problem_Show.asp?id=2042

题意:求一个次数界为n的多项式在模P并模x^m的意义下的逆元。P=7*17*2^23+1。

多项式逆元的含义以及求逆元的方法:http://blog.miskcoo.com/2015/05/polynomial-inverse

公式推导一下。主要还是NTT的使用,我NTT写错了调了半天,太zz了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<complex>
using namespace std;
#define LL long long
const LL P=(LL)**(<<)+;
const int maxn=;
LL a[maxn]={},b[maxn]={},e[maxn]={},zz[][maxn]={};
int bel[maxn]={};
int bt,s,tot=;
LL mpow(LL x,LL k){
if(k<){x=mpow(x,P-);k=-k;}
LL z=;
while(k){
if(k&)z=(z*x)%P;
x=(x*x)%P;
k/=;
}return z;
}
inline void getit(){ for(int i=;i<s;i++)bel[i]=((bel[i>>]>>)|((i&)<<(bt-))); }
inline void ntt(LL *c,int n,int dft){
for(int i=;i<n;i++)if(bel[i]>i)swap(c[bel[i]],c[i]);
for(int step=;step<n;step<<=){
LL w=mpow(,((P-)/(step*))*dft);
for(int j=;j<n;j+=(step<<)){
LL z=;
for(int i=j;i<j+step;++i){
LL x=c[i],y=(c[i+step]*z)%P;
c[i]=(x+y)%P;
c[i+step]=((x-y)%P+P)%P;
z=(z*w)%P;
}
}
}
if(dft==-){
LL mon=mpow(n,P-);
for(int i=;i<n;i++)c[i]=(c[i]*mon)%P;
}
}
inline void dontt(LL *c,LL *d,int x,int y){
bt=;s=;int z=x+y-;
for(;s<z;++bt)s<<=;
getit();
ntt(c,s,);ntt(d,s,);
for(int i=;i<s;i++)c[i]=(c[i]*d[i])%P;
ntt(c,s,-);ntt(d,s,);
}
inline void doit(int n,int m){
if(m==){++tot; zz[tot][]=mpow(a[],P-); return ;}
doit(n,(m+)/);int siz=(m+)/; ++tot;
for(int i=;i<s;i++)e[i]=b[i]=bel[i]=;
for(int i=;i<siz;i++){zz[tot][i]=(zz[tot-][i]*)%P;b[i]=zz[tot-][i];}
for(int i=min(n,m)-;i>=;--i)e[i]=a[i];
dontt(zz[tot-],b,siz,siz); siz=siz+siz-;
dontt(zz[tot-],e,siz,min(n,m));
for(int i=;i<m;i++)zz[tot][i]=((zz[tot][i]-zz[tot-][i])%P+P)%P;
}
int main(){
//freopen("a.in","r",stdin);
int n,m;scanf("%d%d",&n,&m);
for(int i=;i<n;i++){scanf("%lld",&a[i]);a[i]=((a[i]%P)+P)%P;}
doit(n,m);
for(int i=;i<m;i++)printf("%lld ",zz[tot][i]);
printf("\n");
return ;
}

最新文章

  1. centos 7 下安装numpy、scipy等python包
  2. nodejs+express+jade配置
  3. php 之跨域上传图片
  4. hdu-acm stepsHumble Numbers
  5. android开源代码
  6. 【转】JavaScript里的this指针
  7. 编译小结(6)认识Automake
  8. asp.net Hierarchical Data
  9. cocoapods_第二篇
  10. Altium Designer(Protel)网络连接方式Port和Net Label详解
  11. vmware时间不同步的问题
  12. Yii2 独立操作
  13. thinkphp5 taglib自定义标签教程
  14. crontab 误删恢复
  15. ReentrantLock 实现
  16. oracle数据导出以及导入
  17. cmake : undefined reference to dlopen, dlclose, dlsym and dlerror
  18. Docker Volume
  19. IOS的开发演变历史
  20. MySQL性能优化方法二:表结构优化

热门文章

  1. P3173 [HAOI2009]巧克力 &amp;&amp; P1324 矩形分割
  2. Apache POI - Excel
  3. python删除列表元素remove,pop,del
  4. 分布式锁--Redis小试牛刀
  5. bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)
  6. Linux(Debian)软件安装
  7. 20155328 2016-2017-2 《Java程序设计》第六周 学习总结
  8. CF232C Doe Graphs
  9. Zookeeper笔记之使用zk实现集群选主
  10. CentOS 无法通过 yum 安装新版 nodejs 解决办法(安装的还是老版的)