今天开始学习丧心病狂的多项式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;
}

  

bzoj 3992: [SDOI2015]序列统计 NTT+原根的更多相关文章

  1. BZOJ 3992: [SDOI2015]序列统计 NTT+快速幂

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1155  Solved: 532[Submit][Statu ...

  2. bzoj 3992: [SDOI2015]序列统计【原根+生成函数+NTT+快速幂】

    还是没有理解透原根--题目提示其实挺明显的,M是质数,然后1<=x<=M-1 这种计数就容易想到生成函数,但是生成函数是加法,而这里是乘法,所以要想办法变成加法 首先因为0和任何数乘都是0 ...

  3. bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 有转移次数.模M余数.方案数三个值,一看就是系数的地方放一个值.指数的地方放一个值.做 ...

  4. bzoj 3992 [SDOI2015] 序列统计 —— NTT (循环卷积+快速幂)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 (学习NTT:https://riteme.github.io/blog/2016-8 ...

  5. BZOJ 3992: [SDOI2015]序列统计 快速幂+NTT(离散对数下)

    3992: [SDOI2015]序列统计 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S ...

  6. [BZOJ 3992][SDOI2015]序列统计

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 2275  Solved: 1090[Submit][Stat ...

  7. BZOJ 3992: [SDOI2015]序列统计 [快速数论变换 生成函数 离散对数]

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1017  Solved: 466[Submit][Statu ...

  8. BZOJ.3992.[SDOI2015]序列统计(DP NTT 原根)

    题目链接 \(Description\) 给定\(n,m,x\)和集合\(S\).求\(\prod_{i=1}^na_i\equiv x\ (mod\ m)\)的方案数.其中\(a_i\in S\). ...

  9. 【BZOJ】3992: [SDOI2015]序列统计 NTT+生成函数

    [题意]给定一个[0,m-1]范围内的数字集合S,从中选择n个数字(可重复)构成序列.给定x,求序列所有数字乘积%m后为x的序列方案数%1004535809.1<=n<=10^9,3< ...

随机推荐

  1. Akka-CQRS(13)- SSL/TLS for gRPC and HTTPS:自签名证书产生和使用

    到现在,我们已经完成了POS平台和前端的网络集成.不过,还是那句话:平台系统的网络安全是至关重要的.前一篇博客里我们尝试实现了gRPC ssl/tls网络连接,但测试时用的证书如何产生始终没有搞清楚. ...

  2. mysql获取某个字段平均值方法AVG函数的使用

    直接上脚本 ,)) AS 平均分 FROM students WHERE sex= '男' 其中,特别说明一下CAST关键字 CAST(字段名 as 要转换的类型) #其中,可以转换的类型为: CHA ...

  3. 【题解】Luogu P5471 [NOI2019]弹跳

    原题传送门 先考虑部分分做法: subtask1: 暴力\(O(nm)\)枚举,跑最短路 subtask2: 吧一行的点压到vector中并排序,二分查找每一个弹跳装置珂以到达的城市,跑最短路 sub ...

  4. spring boot EnableAutoConfiguration exclude 无效

    本文链接:https://blog.csdn.net/ID19870510/article/details/79373386 首先讲一下SpringBootApplication注解源码定义为 @Ta ...

  5. prometheus消耗内存问题

    参考: https://stackoverflow.com/questions/56115912/why-does-prometheus-consume-so-much-memory https:// ...

  6. Python网络编程、爬虫之requests模块使用

    一.python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块. urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib ...

  7. 下一代微服务-ServiceMesh

    1.简介 系统服务化之后,服务间通信需要关注什么? 服务发现.负载均衡.路由.流控.通信可靠性.弹性.安全.监控.日志 API网关可以集中式的管理这些功能,但是会出现单点故障,并且实现起来网关会变得越 ...

  8. C/ C++ 快速上手

    C++ 快速上手 (一)https://www.cnblogs.com/cosmo89929/archive/2012/12/22/2828745.html C++ 快速上手 (二)https://w ...

  9. 你与BAT只差这一套面试题

    1.Linux如何挂载windows下的共享目录?mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456l ...

  10. ML- 核函数(Kernel) 的 SVM

    Why 核函数 目的是为了解决线性不可分问题. 核心思想是升维. 当样本点在低维空间不能很好地分开的时候, 可以考虑将样本通过某种映射(就是左乘一个矩阵) 到高维空间中, 然后在高维空间就容易求解一个 ...