今天开始学习丧心病狂的多项式qaq......    .

code:

#include <bits/stdc++.h>
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int qpow(int x,int y,int mod)
{
int res=1;
while(y)
{
if(y&1) res=1ll*res*x%mod;
x=1ll*x*x%mod;
y>>=1;
}
return res;
}
const int Mod=1004535809,G=3,iG=qpow(G,Mod-2,Mod),MAX_M=300000;
int fact[10000];
int GetRoot(int x)
{
int tot=0;
int phi=x-1;
for(int i=2;i*i<=phi;++i) if(phi%i==0) { fact[++tot]=i; while(phi%i==0) phi/=i; }
if(phi>1) fact[++tot]=phi;
phi=x-1;
for(int i=2;i<=phi;++i)
{
bool flag=1;
for(int j=1;j<=tot&&flag;++j)
if(qpow(i,phi/fact[j],x)==1) flag=0;
if(flag) return i;
}
return -1;
}
int limit,rev[MAX_M];
void NTT(int *p,int op)
{
for(int i=0;i<limit;++i) if(i<rev[i]) swap(p[i],p[rev[i]]);
for(int i=1;i<limit;i<<=1)
{
int rot=qpow(op==1?G:iG,(Mod-1)/(i<<1),Mod);
for(int j=0;j<limit;j+=(i<<1))
{
int w=1;
for(int k=0;k<i;++k,w=1ll*w*rot%Mod)
{
int x=p[j+k],y=1ll*w*p[i+k+j]%Mod;
p[j+k]=(x+y)%Mod, p[i+j+k]=(x-y+Mod)%Mod;
}
}
}
if(op==-1)
{
int inv=qpow(limit,Mod-2,Mod);
for(int i=0;i<limit;++i) p[i]=1ll*p[i]*inv%Mod;
}
}
map<int,int>mp;
int N,M,S,X,F[MAX_M],H[MAX_M];
void mul(int *A,int *B,int *C)
{
static int res[MAX_M],a[MAX_M],b[MAX_M];
for(int i=0;i<limit;++i) a[i]=A[i],b[i]=B[i];
NTT(a,1), NTT(b,1);
for(int i=0;i<limit;++i) a[i]=1ll*a[i]*b[i]%Mod;
NTT(a,-1);
for(int i=0;i<M-1;++i) res[i]=(a[i]+a[i+M-1])%Mod;
for(int i=0;i<M-1;++i) C[i]=res[i];
}
int main()
{
// setIO("input");
scanf("%d%d%d%d",&N,&M,&X,&S);
int g=GetRoot(M);
for(int i=0;i<M-1;++i) mp[qpow(g,i,M)]=i;
for(int i=1,x;i<=S;++i)
{
scanf("%d",&x);
x%=M;
if(x) F[mp[x%M]]++;
}
H[mp[1]]=1;
int p=0;
for(limit=1;limit<=2*M;limit<<=1,++p);
for(int i=0;i<limit;++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(p-1));
while(N)
{
if(N&1) mul(H,F,H);
mul(F,F,F);
N>>=1;
}
printf("%d\n",H[mp[X]]);
return 0;
}

  

最新文章

  1. 玩转JavaScript OOP[4]&mdash;&mdash;实现继承的12种套路
  2. linux中5条查找命令
  3. HDU 5966 Guessing the Dice Roll
  4. 几种linux脚本的简单执行方法
  5. iframe更新与隐藏
  6. iOS constraint被应用于view上的时间
  7. taglist
  8. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化
  9. hdu 5427 A problem of sorting 水题
  10. Hibernate 数据的批量插入、更新和删除
  11. mac下selenium+python环境搭建
  12. 描述性统计指标 - 众数 Mode
  13. Docker中安装WordPress
  14. WithOne 实体关系引起 EF Core 自动删除数据
  15. datatable处理gridview筛选后的值
  16. 大数据学习(一)-------- HDFS
  17. 消除浏览器对input的自动填充
  18. tensorflow--logistic regression
  19. bootstrap改变上传文件按钮样式,并显示已上传文件名
  20. JAVA工程师面试常见问题集锦

热门文章

  1. Java | Spring Boot Swagger2 集成REST ful API 生成接口文档
  2. React实例------红绿灯
  3. prometheus搜索指标显示No datapoints found.
  4. Macaca app inspector-ios真机设备UI查看器
  5. EXT.NET Combox下拉Grid
  6. django配置文件
  7. Java 之 HashSet 集合
  8. Spring boot应用如何支持https
  9. The server time zone value &#39;�й���׼ʱ��&#39; is unrecognized or represents more than one time zone 。
  10. Ugly Pairs CodeForces - 1156B