题目分析:

一个很显然的同类项合并。注意到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] 序列计数 【矩阵快速幂】的更多相关文章

  1. [Sdoi2017]序列计数 [矩阵快速幂]

    [Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ...

  2. BZOJ.4818.[SDOI2017]序列计数(DP 快速幂)

    BZOJ 洛谷 竟然水过了一道SDOI!(虽然就是很水...) 首先暴力DP,\(f[i][j][0/1]\)表示当前是第\(i\)个数,所有数的和模\(P\)为\(j\),有没有出现过质数的方案数. ...

  3. 2019.02.11 bzoj4818: [Sdoi2017]序列计数(矩阵快速幂优化dp)

    传送门 题意简述:问有多少长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数,且其中至少有一个数是质数,答案对201704082017040820170408取模(n≤1e9, ...

  4. [BZOJ4818][SDOI2017]序列计数(动规+快速幂)

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 972  Solved: 581[Submit][Status ...

  5. [bzoj4818][Sdoi2017]序列计数_矩阵乘法_欧拉筛

    [Sdoi2017]序列计数 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=4818. 题解: 首先列出来一个递推式子 $f[i][0]$ ...

  6. bzoj4818 [Sdoi2017]序列计数

    Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望,这n个数中,至少有一个数是质数.Alice想知道,有多少个序 ...

  7. [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)

    题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...

  8. BZOJ4818 [SDOI2017]序列计数 【生成函数 + 快速幂】

    题目 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数中,至少有一个数是质数.Alice想知道,有多少个序列满足她的要求. ...

  9. 【bzoj4818】[Sdoi2017]序列计数 矩阵乘法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825132.html 题目描述 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的 ...

随机推荐

  1. H5 26-CSS三大特性之优先级

    26-CSS三大特性之优先级 类>标签>通配符>继承>浏览器默认 --> 0 我是段落 <!DOCTYPE html> <html lang=" ...

  2. AtCoder Beginner Contest 122 D - We Like AGC (DP)

    D - We Like AGC Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement Yo ...

  3. Python之异常处理(执行python文件时传入参数)

    使用sys模块 使用sys模块里的argv参数,用来保存参数值 import sys #sys.argv的作用是获取到运行python文件时,传入的参数 #默认如果运行python文件不传参数,arg ...

  4. Python之字符串操作

    一.字符串特点 内容不可修改 password=' #内容不可修改 二.字符串常用方法 1..strip()方法 去字符串两边的空格和换行符 print(password.strip()) #去掉字符 ...

  5. 初次使用beego框架

    安装beego框架以及bee工具 go get -u github.com/astaxie/beego go get github.com/beego/bee 创建一个新项目 bee new weba ...

  6. 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  7. c# winform导出Excel

    //需要注意添加引用Microsoft.Office.Interop.Excel.dll string fileName =DateTime.Now.Year+ DateTime.Now.Month+ ...

  8. js-XMLHttpRequest 2级

    ###1. XMLHttpRquest 2级 1)   FormData 现代web应用中频繁使用的一项功能就死表单数据的序列化, XMLHttpRquest 2级为此定义了FormData类型 Fo ...

  9. [转帖]SUSE Linux

    历经坎坷多次易主,SUSE Linux路在何方? http://blog.itpub.net/11310314/viewspace-2638811/ 之前一直理不清楚 SUSE和RedHat的关系 甚 ...

  10. RandomStringUtils

    System.out.println(RandomStringUtils.random(5));//随机多少个随机字符中文环境乱码 System.out.println(RandomStringUti ...