题解:

首先先弄出$f(x)$的生成函数
$$f(x)=\prod_{i=1}^{n} {{(\frac{1}{1-x^i})}}^{a[i]}$$
因为$f(x)$已知,我们考虑利用这个式子取推出$a[i]$
右边的乘法显然处理起来不方便,按照套路两边取对数
$$ln(f(x))=\sum_{i=1}^{n} {-a[i]*ln(1-x^i)}$$
然后看见$ln(1+x)$肯定是泰勒展开了,得到
$$ln(f(x))=\sum_{i=1}^{n} {-a[i]*\sum_{k=1}^{INF} {\frac{{(-1)}^{k-1}*{{{(-x^i)}^k}}}{k}}}$$
化简一下就是
$$ln(f(x))=\sum_{i=1}^{n} {a[i]*\sum_{k=1}^{INF} {\frac{{x^{ik}}}{k}}}$$
然后因为我们知道的$f(x)$的每一项,所以变成枚举x系数
令$T=ik$
$$ln(f(x))=\sum_{T=1}^{INF} {x^T \sum_{i|T}^{T}{\frac{i*a[i]}{T}}}$$
然后我们只需要从小到大枚举T,然后依旧算出每个$a[i]$并处理对之后的影响

常数太大只有50。。。不知道怎么卡

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
#define ll long long
namespace IO{char ss[1<<24],*A=ss,*B=ss;IL char gc(){return A==B&&(B=(A=ss)+fread(ss,1,1<<24,stdin),A==B)?EOF:*A++;}template<class T>void read(T &x){rint f=1,c; while (c=gc(),c<48||c>57) if (c=='-') f=-1; x=(c^48);while (c=gc(),c>47&&c<58) x=(x<<3)+(x<<1)+(c^48); x*=f;}char sr[1<<24],z[20]; int C1=-1,Z;template<class T>void wer(T x){if (x<0) sr[++C1]='-',x=-x;while (z[++Z]=x%10+48,x/=10);while (sr[++C1]=z[Z],--Z);}IL void wer1(){sr[++C1]=' ';}IL void wer2(){sr[++C1]='\n';}template<class T>IL void maxa(T &x,T y) { if (x<y) x=y;}template<class T>IL void mina(T &x,T y) { if (x>y) x=y;}template<class T>IL void MAX(T x,T y){ return x>y?x:y;} template<class T>IL void MIN(T x,T y){ return x<y?x:y;}
};
using namespace IO;
const int N=3e5*4;
const double ee=1.0000000000;
const double pi=acos(-1.0);
struct cp{double a,b;cp operator +(const cp o) const{return (cp){o.a+a,o.b+b};}cp operator -(const cp o) const{return (cp){a-o.a,b-o.b};}cp operator *(const cp o) const{return (cp){a*o.a-b*o.b,b*o.a+a*o.b};}
}a[N],b[N],w[N];
int n,m,l,r[N],mo,mo2,mo3,x1[N],x2[N];
int fsp(int x,int y)
{ll now=1;while (y){if (y&1) now=now*x%mo;y>>=1; x=1ll*x*x%mo;}return now;
}
void fft_init()
{l=0; n=1; while (n<=m) n<<=1,l++;for (int i=0;i<n;i++) {w[i]=(cp){cos(pi*i/n),sin(pi*i/n)};r[i]=(r[i/2]/2)|((i&1)<<(l-1));}
}
void fft_clear()
{rep(i,0,n-1) a[i].a=a[i].b=b[i].a=b[i].b=0;
}
void fft(cp *a,int o)
{for (int i=0;i<n;i++) if (i>r[i]) swap(a[i],a[r[i]]);for (int i=1;i<n;i*=2)for (int j=0;j<n;j+=(i*2)){cp *x1=a+j,*x2=a+i+j;for (int k=0;k<i;k++,x1++,x2++){cp W=w[n/i*k]; W.b*=o;cp x=*x1,y=(*x2)*W;*x1=x+y,*x2=x-y;}}if (o==-1) rep(i,0,n-1) a[i].a/=n;
}
cp a1[N],a2[N],a3[N],b1[N],b2[N];
void getcj(int *A,int *B,int len)
{m=2*len; fft_init();rep(i,0,len-1){ a1[i].a=A[i]/mo2,a2[i].a=A[i]%mo2;b1[i].a=B[i]/mo2,b2[i].a=B[i]%mo2;}fft(a1,1); fft(a2,1); fft(b1,1); fft(b2,1);rep(i,0,n-1){a3[i]=a1[i]*b1[i];a1[i]=a1[i]*b2[i]+a2[i]*b1[i];b2[i]=a2[i]*b2[i];}fft(a3,-1); fft(a1,-1); fft(b2,-1);rep(i,0,len-1){ B[i]=((ll)(a3[i].a+0.5)%mo*mo3+(ll)(a1[i].a+0.5)%mo*mo2+(ll)(b2[i].a+0.5))%mo; B[i]=(B[i]+mo)%mo;}rep(i,0,n){a1[i].a=a1[i].b=a2[i].a=a2[i].b=a3[i].a=a3[i].b=0;b1[i].a=b1[i].b=b2[i].a=b2[i].b=0;}
}
int C[N];
IL void getinv(int *A,int *B,int len)
{if (len==1) {B[0]=fsp(A[0],mo-2); return;}getinv(A,B,(len+1)>>1);rep(i,0,len-1) C[i]=A[i];getcj(B,C,len); getcj(B,C,len);rep(i,0,len-1) B[i]=((2ll*B[i]-C[i])%mo+mo)%mo;
}
IL void getdao(int *A,int *B,int len)
{for (int i=0;i<len-1;i++)B[i]=1ll*A[i+1]*(i+1)%mo;B[len-1]=0;
}
IL void getjf(int *A,int *B,int len)
{for (int i=1;i<len;i++)B[i]=1ll*A[i-1]*fsp(i,mo-2)%mo;B[0]=0;
}
int C[N],D[N];
IL void getln(int *A,int *B,int len)
{getdao(A,C,len);getinv(A,D,len);getcj(C,D,len);getjf(D,B,len);
}
void getexp(int *A,int *B,int len)
{if (len==1) {B[0]=1; return;}getexp(A,B,(len+1)>>1);getln(B,C,len);rep(i,0,len-1) C[i]=((-C[i]+A[i])%mo+mo)%mo;C[0]=(C[0]+1)%mo;getcj(C,B,len);
}
int main()
{freopen("1.in","r",stdin);freopen("1.out","w",stdout);int n1;read(n1); read(mo); mo2=3e4; mo3=mo2*mo2;x1[0]=1;rep(i,1,n1) read(x1[i]);getln(x1,x2,n1+1);rep(i,1,n1){for (int j=2;j*i<=n1;j++)x2[i*j]=(x2[i*j]-1ll*x2[i]*fsp(j,mo-2))%mo;}int cnt=0;rep(i,1,n1) if (x2[i]) cnt++;wer(cnt); wer2();rep(i,1,n1) if (x2[i]) wer(i),wer1();wer2();fwrite(sr,1,C1+1,stdout); return 0;
}

#updata 12.14

使用我优秀的常数的新模板他就过了

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
#define ll long long
namespace IO{char ss[1<<24],*A=ss,*B=ss;IL char gc(){return A==B&&(B=(A=ss)+fread(ss,1,1<<24,stdin),A==B)?EOF:*A++;}template<class T>void read(T &x){rint f=1,c; while (c=gc(),c<48||c>57) if (c=='-') f=-1; x=(c^48);while (c=gc(),c>47&&c<58) x=(x<<3)+(x<<1)+(c^48); x*=f;}char sr[1<<24],z[20]; int C1=-1,Z;template<class T>void wer(T x){if (x<0) sr[++C1]='-',x=-x;while (z[++Z]=x%10+48,x/=10);while (sr[++C1]=z[Z],--Z);}IL void wer1(){sr[++C1]=' ';}IL void wer2(){sr[++C1]='\n';}template<class T>IL void maxa(T &x,T y) { if (x<y) x=y;}template<class T>IL void mina(T &x,T y) { if (x>y) x=y;}template<class T>IL void MAX(T x,T y){ return x>y?x:y;} template<class T>IL void MIN(T x,T y){ return x<y?x:y;}
};
using namespace IO;
const int N=3e5*4;
const double ee=1.0000000000;
const double pi=acos(-1.0);
struct cp{double a,b;cp operator +(const cp o) const{return (cp){o.a+a,o.b+b};}cp operator -(const cp o) const{return (cp){a-o.a,b-o.b};}cp operator *(const cp o) const{return (cp){a*o.a-b*o.b,b*o.a+a*o.b};}
}a[N],b[N],c[N],d[N];
int n,m,l,r[N],mo,x1[N],x2[N];
IL int fsp(int x,int y)
{ll now=1;while (y){if (y&1) now=now*x%mo;x=1ll*x*x%mo;y>>=1;}return now;
}
IL void clear()
{for (int i=0;i<=n;i++) a[i].a=a[i].b=b[i].a=b[i].b=c[i].a=c[i].b=d[i].a=d[i].b=0;
}
cp *w[N],tmp[N*2];
int p;
IL void init()
{cp *now=tmp;for (int i=1;i<=p;i<<=1){w[i]=now;for (int j=0;j<i;j++) w[i][j]=(cp){cos(pi*j/i),sin(pi*j/i)};now+=i;}
}
IL void fft_init()
{l=0; for (n=1;n<=m;n<<=1) l++;for (int i=0;i<n;i++) r[i]=(r[i/2]/2)|((i&1)<<(l-1));
}
void fft(cp *a,int o)
{for (int i=0;i<n;i++) if (i>r[i]) swap(a[i],a[r[i]]);for (int i=1;i<n;i<<=1)for (int j=0;j<n;j+=(i*2)){cp *x1=a+j,*x2=a+i+j,*W=w[i];for (int k=0;k<i;k++,x1++,x2++,W++){cp x=*x1,y=(cp){(*W).a,(*W).b*o}*(*x2); *x1=x+y,*x2=x-y;}}if (o==-1) for(int i=0;i<n;i++) a[i].a/=n;
}
IL void getcj(int *A,int *B,int len)
{rep(i,0,len){A[i]=(A[i]+mo)%mo,B[i]=(B[i]+mo)%mo;}for (int i=0;i<len;i++){a[i]=(cp){A[i]&32767,A[i]>>15};b[i]=(cp){B[i]&32767,B[i]>>15};}m=len*2; fft_init();fft(a,1); fft(b,1);for (int i=0;i<n;i++){int j=(n-1)&(n-i);c[j]=(cp){0.5*(a[i].a+a[j].a),0.5*(a[i].b-a[j].b)}*b[i];d[j]=(cp){0.5*(a[i].b+a[j].b),0.5*(a[j].a-a[i].a)}*b[i];}fft(c,1); fft(d,1);double inv=ee/n;rep(i,0,n) c[i].a*=inv,c[i].b*=inv;rep(i,0,n) d[i].a*=inv,d[i].b*=inv;rep(i,0,len){ll a1=c[i].a+0.5,a2=c[i].b+0.5;ll a3=d[i].a+0.5,a4=d[i].b+0.5;B[i]=(a1+((a2+a3)%mo<<15)+((a4%mo)<<30))%mo;}clear();
}
int C[N],D[N];
IL void getinv(int *A,int *B,int len)
{if (len==1) {B[0]=fsp(A[0],mo-2); return;}getinv(A,B,(len+1)>>1);rep(i,0,len-1) C[i]=A[i];getcj(B,C,len); getcj(B,C,len);rep(i,0,len-1) B[i]=((2ll*B[i]-C[i])%mo+mo)%mo;
}
IL void getdao(int *A,int *B,int len)
{for (int i=0;i<len-1;i++)B[i]=1ll*A[i+1]*(i+1)%mo;B[len-1]=0;
}
IL void getjf(int *A,int *B,int len)
{for (int i=1;i<len;i++)B[i]=1ll*A[i-1]*fsp(i,mo-2)%mo;B[0]=0;
}
IL void getln(int *A,int *B,int len)
{getdao(A,C,len);getinv(A,D,len);getcj(C,D,len);getjf(D,B,len);
}
void getexp(int *A,int *B,int len)
{if (len==1) {B[0]=1; return;}getexp(A,B,(len+1)>>1);getln(B,C,len);rep(i,0,len-1) C[i]=((-C[i]+A[i])%mo+mo)%mo;C[0]=(C[0]+1)%mo;getcj(C,B,len);
}
int main()
{freopen("10.in","r",stdin);freopen("1.out","w",stdout);int n1;read(n1); read(mo);x1[0]=1;rep(i,1,n1) read(x1[i]);p=(n1+1)<<1; init();getln(x1,x2,n1+1);rep(i,1,n1){for (int j=2;j*i<=n1;j++)x2[i*j]=(x2[i*j]-1ll*x2[i]*fsp(j,mo-2))%mo;}int cnt=0;rep(i,1,n1) if (x2[i]) cnt++;wer(cnt); wer2();rep(i,1,n1) if (x2[i]) wer(i),wer1();wer2();fwrite(sr,1,C1+1,stdout); return 0;
}

转载于:https://www.cnblogs.com/yinwuxiao/p/10082817.html

[BZOJ4913][SDOI2017]遗忘的集合相关推荐

  1. [SDOI2017]遗忘的集合

    题面 DP学得好好的为什么突然想起写多项式呢? 这要从几天前说起 一开始是看到一道FWT的DP([SNOI2017]遗失的答案) 然后在洛谷上搜 没有搜到 但是搜到了这个题 仔细一看 MTT+莫比乌斯 ...

  2. 洛谷 3784(bzoj 4913) [SDOI2017]遗忘的集合——多项式求ln+MTT

    题目:https://www.luogu.org/problemnew/show/P3784 https://www.lydsy.com/JudgeOnline/problem.php?id=4913 ...

  3. 退役前的做题记录2.0

    退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...

  4. 循环小数是分数集合吗_2020年部分CFA国外考场取消,通过率会受影响吗?

    10月7日CFA institute发布最新消息:确定关闭37个12月CFA考试的城市考场! 由于这一批取消的全部是国外考场,国内考场目前都稳稳的,于是,就有CFA考生评论说:感觉竞争更激烈了考试没& ...

  5. 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技

    谷歌大脑科学家亲解 LSTM:一个关于"遗忘"与"记忆"的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入 ...

  6. 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事

    谷歌大脑科学家亲解 LSTM:一个关于"遗忘"与"记忆"的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入 ...

  7. DL之GRU:GRU算法相关论文、建立过程(基于TF)、相关思路配图集合、TF代码实现

    DL之GRU:GRU算法相关论文.建立过程(基于TF).相关思路配图集合.TF代码实现 目录 GRU算法相关论文 GRU算法建立过程(基于TF) GRU算法的TF代码实现 GRU算法相关论文 GRU是 ...

  8. DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(一)

    DL:深度学习算法(神经网络模型集合)概览之<THE NEURAL NETWORK ZOO>的中文解释和感悟(一) 目录 THE NEURAL NETWORK ZOO perceptron ...

  9. 《MySQL必知必会》所有SQL语句图表集合(可作为查询表使用)---已完结

    本篇文章是对<MySQL必知必会>所有语句知识点的图表集合,适合快速查询遗忘的SQL语句. 本文的脉络结构,首先先给出<MySQL必知必会>的目录和本书中用到的数据表的UML图 ...

最新文章

  1. ThinkSNS积分商城系统 一站式解决企业商城建站需求
  2. iOS----------苹果警告
  3. 一文深入浅出cv中的Attention机制
  4. 看设备指示灯识别网络故障
  5. 入门深度学习,其实并不难!
  6. python数据分析与展示 pdf课件_python数据分析与展示 课件 相关实例(示例源码)下载 - 好例子网...
  7. linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...
  8. leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
  9. robot:当用例失败时执行关键字(发送短信)
  10. Java并发编程之AbstractQueuedSynchronizer(AQS)源码解析
  11. softmax的简洁实现
  12. Excel文件处理实战-Python编程进阶
  13. 珞珈一号影像辐射定标软件操作方法
  14. Aspose.word保存PDF时进行授权访问设置
  15. 南京银行网站连接不到服务器,南京银行网络准入控制平台
  16. 【qq机器人】机器人发美女图片
  17. 数据库系统原理学习笔记三(关系数据模型的组成要素)
  18. Learn OpenCV之Convex Hull
  19. 关于 NVIDIA 游戏内覆盖变成英文如何让其恢复中文
  20. 微信云托管常见问题FAQ(一)

热门文章

  1. 华为笔记本没有网线口_3599元起,华为台式机MateStation B515上架:R5 4600G
  2. matlab中lambertw,MATLAB解常微分方程
  3. java堆排序工具包_JAVA 排序工具类
  4. python1到100偶数求和_python1-100怎样偶数求和?_后端开发
  5. 高中计算机学ppt吗,高中信息技术人工智能教学培训课件选修5ppt
  6. 二分查找向上还是向下取整_113、股市中的跳空缺口判断技巧是向上还是向下
  7. openstack horizon dashboard_OpenStack最新版本:Ussuri发布亮点
  8. 系统学习数字图像处理之频域滤波
  9. 国产系统linux硬盘分区,Linux系统硬盘分区方案推荐
  10. 嵌入式系统——存储管理方案