Bzoj4818:生成函数 快速幂
转来的题面:
首先这题显然补集转化,就是用全部方案减去不含任何质数的方案。
然后怎么做呢?
考虑m比较小,我们能大力把<=m的质数全都筛出来。
发现n很大,要么倍增要么快速幂......
发现p相当小,所以我们能在mod p的同余系下做啊。
一看到同余系下求方案数立刻想到卷积和生成函数......
假设我们有一个多项式f(x),其中x^i的系数为a个数的序列mod p为i的方案数(a为我们引入的变量)。
同时我们有另一个多项式g(x),其中x^i的系数为b个数的序列mod p为i的方案数(b为我们引入的变量)。
那么,我们如果让f(x)和g(x)做卷积的话,新的多项式x^i的系数就是(a+b)个数的序列mod p为i的方案数的说。
这就是生成函数了。
回到这个题,我们先初始化多项式f(x),令x^i的系数为为1个数mod p为i的方案数。
然后我们求出这个多项式的n次方,就是我们需要的答案了。
发现这道题的p很小,我们连FFT都不用,直接用一个多项式类暴力快速幂就行了。复杂度O(m+p^2logn),跑的飞起。
话说为什么p才100啊,如果修改一下模数然后NTT的话,可以做到p为1e5级别,n为1e18级别的。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define debug cout
typedef long long int lli;
using namespace std;
const int maxn=1e2+1e1,maxl=2e7+1e2,lim=2e7;
const int mod=; bool vis[maxl];
int p,m; struct Poly {
lli dat[maxn];
Poly() {
memset(dat,,sizeof(dat));
}
lli& operator [] (const int &x) {
return dat[x];
}
const lli& operator [] (const int &x) const {
return dat[x];
}
friend Poly operator * (const Poly &a,const Poly &b) {
Poly ret;
for(int i=;i<p;i++) for(int j=;j<p;j++) {
( ret[(i+j)%p] += a[i] * b[j] % mod ) %= mod;
}
return ret;
}
}full,oly; inline void sieve() {
static int prime[maxl],cnt;
vis[] = ;
for(int i=;i<=m;i++) {
if( !vis[i] ) prime[++cnt] = i;
for(int j=;j<=cnt&&(lli)i*prime[j]<=m;j++) {
vis[i*prime[j]] = ;
if( ! ( i % prime[j] ) ) break;
}
}
} inline void init() {
for(int i=;i<=m;i++) {
full[i%p]++;
if( vis[i] ) oly[i%p]++;
}
} inline Poly fastpow(Poly base,int tim) {
Poly ret = base; --tim;
while( tim ) {
if( tim & ) ret = ret * base;
if( tim >>= ) base = base * base;
}
return ret;
} int main() {
static int n;
static lli ans;
scanf("%d%d%d",&n,&m,&p) , sieve();
init();
full = fastpow(full,n) , oly = fastpow(oly,n);
ans = ( full[] - oly[] + mod ) % mod;
printf("%lld\n",ans);
return ;
}
Bzoj4818:生成函数 快速幂的更多相关文章
- SARS病毒 (生成函数 + 快速幂)
链接:https://ac.nowcoder.com/acm/contest/992/A来源:牛客网 题目描述 目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA ...
- BZOJ4818 [SDOI2017]序列计数 【生成函数 + 快速幂】
题目 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数中,至少有一个数是质数.Alice想知道,有多少个序列满足她的要求. ...
- 【XSY2612】Comb Avoiding Trees 生成函数 多项式求逆 矩阵快速幂
题目大意 本题的满二叉树定义为:不存在只有一个儿子的节点的二叉树. 定义一棵满二叉树\(A\)包含满二叉树\(B\)当且经当\(A\)可以通过下列三种操作变成\(B\): 把一个节点的两个儿子同时删掉 ...
- 2018.12.31 bzoj3992: [SDOI2015]序列统计(生成函数+ntt+快速幂)
传送门 生成函数简单题. 题意:给出一个集合A={a1,a2,...as}A=\{a_1,a_2,...a_s\}A={a1,a2,...as},所有数都在[0,m−1][0,m-1][0,m− ...
- 【bzoj3684】 大朋友和多叉树 生成函数+多项式快速幂+拉格朗日反演
这题一看就觉得是生成函数的题... 我们不妨去推下此题的生成函数,设生成函数为$F(x)$,则$[x^s]F(x)$即为答案. 根据题意,我们得到 $F(x)=x+\sum_{i∈D} F^i(x)$ ...
- HDU 2065 "红色病毒"问题 ——快速幂 生成函数
$A(x)=1+x^2/2!+x^4/4!...$ $A(x)=1+x^1/1!+x^2/2!...$ 然后把生成函数弄出来. 暴力手算. 发现结论. 直接是$4^{n-1}+2^{n-1}$ 然后快 ...
- bzoj 3992: [SDOI2015]序列统计【原根+生成函数+NTT+快速幂】
还是没有理解透原根--题目提示其实挺明显的,M是质数,然后1<=x<=M-1 这种计数就容易想到生成函数,但是生成函数是加法,而这里是乘法,所以要想办法变成加法 首先因为0和任何数乘都是0 ...
- UOJ424 Count 生成函数、多项式求逆、矩阵快速幂
传送门 两个序列相同当且仅当它们的笛卡尔树相同,于是变成笛卡尔树计数. 然后注意到每一个点的权值一定会比其左儿子的权值大,所以笛卡尔树上还不能够存在一条从根到某个节点的路径满足向左走的次数\(> ...
- BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】
题目分析: 一个很显然的同类项合并.注意到p的大小最大为100,考虑把模p意义下相同的求出来最后所有的减去没有质数的做矩阵快速幂即可. 代码: #include<bits/stdc++.h> ...
随机推荐
- T分布在医药领域应用-python建模
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- AngularJs分层结构小demo
后端mvc分层,前端也要分层才对嘛.分层的好处不言而喻.简直太清晰,容易维护.反正清爽的一逼.不信你看. 思路:分为controller层和service层.controller层再提取一个公共的层. ...
- webpack快速入门——CSS进阶:自动处理CSS3前缀
为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀.目的就是让我们写的页面在每个浏览器中都可以顺利运行. 1.安装 cnpm i postcss-loader aut ...
- c#的事件用法——实现下载时发生的事件
//下载时发出的事件 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- Java SSM框架之MyBatis3(八)MyBatis之动态SQL
前言: mybatis框架中最具特色的便是sql语句中的自定义,而动态sql的使用又使整个框架更加灵活. 创建User表 /*Table structure for table `user` */ D ...
- [转载]WIN7已经记住访问另一台电脑的账号和密码 凭证
http://jingyan.baidu.com/article/a3aad71aaa32eeb1fb0096c8.html
- 克隆虚拟机重启之后eth0不见的解决方案
今天用虚拟机克隆多一个虚拟机的时候,发现克隆之后的新虚拟机的网卡eth0在配置之后完全是用不了的,下面说一下我的解决办法,亲测可用. 1.用ipconfig命令查看ip信息的时候会发现虚拟机没有找到e ...
- 网页排版的时候不要忘了table标签
[概况] DIV+CSS是WEB设计标准,它是一种网页的布局方法.与传统中通过表格(table)布局定位的方式不同,它可以实现网页页面内容与表现相分离.但有时候在布局的时候,纯粹的用div感觉嵌套的太 ...
- H5开发APP考题和答案
{ "last_updated": { "$date": 1544276670569 }, "page_count": 1, "a ...
- springboot整合Thymeleaf模板引擎
引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</ ...