题目分析:

一个很显然的同类项合并。注意到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. lower_bound函数与upper_bound函数

    头文件 : algorithm vector<int>a a中的元素必须升序,用的是二分 lower_bound(a.begin(),a.end(),k) 返回a容器中,最右边的小于等于k ...

  2. Iar8.1安装包破解

    Iar8.1安装包链接链接:https://pan.baidu.com/s/1F6sxEcatk3_YPq47lvc8Mw 密码:mnlz 破解链接  https://www.cnblogs.com/ ...

  3. Python_服务器与多客户端通信、UDP协议、pycharm打印带颜色输出、时间同步的机制

    1.服务器与多客户端通信 import socket # 创建tcp socket的套接字 sk = socket.socket() # bind sk.bind(('127.0.0.1',8080) ...

  4. rest-framework频率组件

    throttle(访问频率)组件 1.局部视图throttle from rest_framework.throttling import BaseThrottle VISIT_RECORD={} c ...

  5. 【学习总结】Git学习-参考廖雪峰老师教程-期末总结

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

  6. css行内省略号、垂直居中

    应用场景分析: 一.当你的文字限定行数,超出部分的文字用省略号显示. (有两个使用场景:1.单行 2.多行) // 单行 overflow: hidden; text-overflow:ellipsi ...

  7. java对象的四种引用:强引用、软引用、弱引用和虚引用

    在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用.也就是说,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.垃圾回收器一旦发现这些无用对象,就会对 ...

  8. [GS]uuid-ossp

    uuid-ossp 原贴地址:http://postgres.cn/docs/9.6/uuid-ossp.html 关于 OSSP的含义 uuid-ossp模块提供函数使用几种标准算法之一产生通用唯一 ...

  9. [转帖]CentOS 6 服务器安全配置指南(通用)

    CentOS 6 服务器安全配置指南(通用) http://seanlook.com/2014/09/07/linux-security-general-settings/  发表于 2014-09- ...

  10. 调整分区大小 转载--------------http://blog.csdn.net/perfectzq/article/details/73606119

    centos7重新调整分区大小 centos 7 调整 root 和 home 的容量大小 查看磁盘的空间大小: df -h  备份/home : cp -r /home/ homebak/ 卸载​  ...