BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】
题目分析:
一个很显然的同类项合并。注意到p的大小最大为100,考虑把模p意义下相同的求出来最后所有的减去没有质数的做矩阵快速幂即可。
代码:
#include<bits/stdc++.h>
using namespace std; const int maxn = ; const int mod = ; int n,m,q; int base[][]; int flag[maxn],prime[maxn/],num; int mat[][],Res[][],po[][]; void init(){
flag[] = ;
for(int i=;i<=m;i++){
if(!flag[i]) prime[++num] = i;
for(int j=;j<=num&&i*prime[j]<=m;j++){
flag[i*prime[j]] = ;
if(i%prime[j] == ) break;
}
}
for(int i=;i<=m;i++){
if(flag[i]) base[i%q][]++;
base[i%q][]++;
}
} void BuildMatrix(int now){
memset(mat,,sizeof(mat));
for(int i=;i<q;i++){
for(int j=;j<q;j++){
int nw = j-i;if(nw < ) nw += q;
mat[j][nw] += base[i][now];
}
}
} void fast_pow(int now){
if(now == ){
for(int i=;i<q;i++) for(int j=;j<q;j++) Res[i][j]=mat[i][j];
}else{
fast_pow(now/);
memset(po,,sizeof(po));
for(int k=;k<q;k++)
for(int i=;i<q;i++)
for(int j=;j<q;j++){
po[i][j] += (1ll*Res[i][k]*Res[k][j])%mod;
po[i][j] %= mod;
}
for(int i=;i<q;i++)for(int j=;j<q;j++)Res[i][j]=po[i][j];
if(now & ){
memset(po,,sizeof(po));
for(int k=;k<q;k++)
for(int i=;i<q;i++)
for(int j=;j<q;j++){
po[i][j] += (1ll*Res[i][k]*mat[k][j])%mod;
po[i][j] %= mod;
}
for(int i=;i<q;i++)for(int j=;j<q;j++)Res[i][j]=po[i][j];
}
}
} void work(){
BuildMatrix();
fast_pow(n);
int ans = Res[][];
BuildMatrix();
fast_pow(n);
ans -= Res[][];
if(ans < ) ans += mod;
printf("%d",ans);
} int main(){
scanf("%d%d%d",&n,&m,&q);
init();
work();
return ;
}
BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】的更多相关文章
- [Sdoi2017]序列计数 [矩阵快速幂]
[Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ...
- BZOJ.4818.[SDOI2017]序列计数(DP 快速幂)
BZOJ 洛谷 竟然水过了一道SDOI!(虽然就是很水...) 首先暴力DP,\(f[i][j][0/1]\)表示当前是第\(i\)个数,所有数的和模\(P\)为\(j\),有没有出现过质数的方案数. ...
- 2019.02.11 bzoj4818: [Sdoi2017]序列计数(矩阵快速幂优化dp)
传送门 题意简述:问有多少长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数,且其中至少有一个数是质数,答案对201704082017040820170408取模(n≤1e9, ...
- [BZOJ4818][SDOI2017]序列计数(动规+快速幂)
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 972 Solved: 581[Submit][Status ...
- [bzoj4818][Sdoi2017]序列计数_矩阵乘法_欧拉筛
[Sdoi2017]序列计数 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=4818. 题解: 首先列出来一个递推式子 $f[i][0]$ ...
- bzoj4818 [Sdoi2017]序列计数
Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望,这n个数中,至少有一个数是质数.Alice想知道,有多少个序 ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
- BZOJ4818 [SDOI2017]序列计数 【生成函数 + 快速幂】
题目 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数中,至少有一个数是质数.Alice想知道,有多少个序列满足她的要求. ...
- 【bzoj4818】[Sdoi2017]序列计数 矩阵乘法
原文地址:http://www.cnblogs.com/GXZlegend/p/6825132.html 题目描述 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的 ...
随机推荐
- 从 0 到 1 实现 React 系列 —— 3.生命周期和 diff 算法
看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/. ...
- 使用 OpenSSL 创建私有 CA:1 根证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 OpenS ...
- Python学习第十三篇——函数的深层次运用
def make_pizza(size,*toppings): print("\nmaking a "+str(size)+" size pizza with follo ...
- SoftWater——SDN+UnderWater系列论文一
---- SoftWater: Software-defined networking for next-generation underwater communication systems 来源: ...
- pdf中内嵌字体问题
在提交论文pdf到IEEE时总要检查字体是否为内嵌的,查看pdf中所有字体及是否内嵌可查看:http://sinme.blog.sohu.com/120043575.html. 具体做法是: 在pdf ...
- ES5与ES6的小差异
ES5与ES6的小差异 变量的定义 ES6与ES5的区别 ES5: <script> console.log(username); var username; var username = ...
- echarts图片保存
一.js: function updateChart(versionList,rateList) { option = { title: { text: '拖动频次' }, tooltip : { t ...
- nodejs 中的一些方法
fs.unlink(path, [callback(err)]) //删除文件操作. //path 文件路径 //callback 回调,传递一个异常参数err. ndoe中解决跨域问题 expres ...
- js this的含义以及讲解
this关键字是一个非常重要的语法点.毫不夸张地说,不理解它的含义,大部分开发任务都无法完成. 首先,this总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象. 下面来两个例子来让大家更 ...
- java 代理模式(静态代理、动态代理、Cglib代理) 转载
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...