[Sdoi2017]序列计数

题目大意https://www.lydsy.com/JudgeOnline/problem.php?id=4818.


题解

首先列出来一个递推式子

$f[i][0]$表示$i$个任意数的答案。

$f[i][1]$表示$i$个合数的答案。

转移的时候发现可以用矩阵优化这个过程。

至于怎么把矩阵建出来,我们可以开个桶来解决这个问题。

代码

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int mod = 20170408 ;

char *p1, *p2, buf[100000];

#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )

int rd() {
int x = 0;
char c = nc();
while (c < 48) {
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x;
} int p, n, m; struct Matr {
int a[110][110];
Matr() {memset(a, 0, sizeof a);}
friend Matr operator * (const Matr &a, const Matr &b) {
Matr re;
for (int i = 0; i < p; i ++ ) {
for (int j = 0; j < p; j ++ ) {
for (int k = 0; k < p; k ++ ) {
(re.a[i][j] += (ll)a.a[i][k] * b.a[k][j] % mod) %= mod;
}
}
}
return re;
}
friend Matr operator ^ (Matr x, int y) {
Matr re;
for (int i = 0; i < p; i ++ ) {
re.a[i][i] = 1;
}
while (y) {
if (y & 1) {
re = re * x;
}
y >>= 1;
x = x * x;
}
return re;
}
}M, A; int bu[110]; bool vis[20000010]; int prime[20000010], cnt; int main() {
n = rd(), m = rd(), p = rd();
for (int i = 0; i < p; i ++ ) {
bu[i] = m / p;
if (i) {
if (i <= m % p) {
bu[i] ++ ;
}
}
}
for (int i = 0; i < p; i ++ ) {
for (int j = 0; j < p; j ++ ) {
M.a[i][j] = bu[(j - i + p) % p];
}
}
for (int i = 0; i < p; i ++ ) {
A.a[0][i] = bu[i];
}
A = A * (M ^ (n - 1));
int ans = A.a[0][0];
vis[1] = true;
for (int i = 2; i <= m; i ++ ) {
if (!vis[i]) {
prime[ ++ cnt] = i;
}
for (int j = 1; j <= cnt && (ll)i * prime[j] <= m; j ++ ) {
vis[i * prime[j]] = true;
if (i % prime[j] == 0) {
break;
}
}
}
for (int i = 1; i <= m; i ++ ) {
if (!vis[i]) {
bu[i % p] -- ;
}
}
for (int i = 0; i < p; i ++ ) {
A.a[0][i] = bu[i];
}
for (int i = 0; i < p; i ++ ) {
for (int j = 0; j < p; j ++ ) {
M.a[i][j] = bu[(j - i + p) % p];
}
}
A = A * (M ^ (n - 1));
printf("%d\n", (ans - A.a[0][0] + mod) % mod);
return 0;
}

小结:就是这种求存在的问题,可以转化成全部-不存在。

[bzoj4818][Sdoi2017]序列计数_矩阵乘法_欧拉筛的更多相关文章

  1. 【BZOJ4818】[Sdoi2017]序列计数 DP+矩阵乘法

    [BZOJ4818][Sdoi2017]序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数 ...

  2. 【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 359 Description Al ...

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

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

  4. BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】

    题目分析: 一个很显然的同类项合并.注意到p的大小最大为100,考虑把模p意义下相同的求出来最后所有的减去没有质数的做矩阵快速幂即可. 代码: #include<bits/stdc++.h> ...

  5. BZOJ4818 LOJ2002 SDOI2017 序列计数 【矩阵快速幂优化DP】*

    BZOJ4818 LOJ2002 SDOI2017 序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数. Alice还希 ...

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

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

  7. [Bzoj4818]序列计数(矩阵乘法+DP)

    Description 题目链接 Solution 容斥原理,答案为忽略质数限制的方案数减去不含质数的方案数 然后矩阵乘法优化一下DP即可 Code #include <cstdio> # ...

  8. [LuoguP2151][SDOI2009]HH去散步_递推_矩阵乘法_图论

    HH去散步 题目链接:https://www.luogu.org/problem/P2151 数据范围:略. 题解: 数据范围好小,让人不禁想用一些毒瘤算法,但是失败了. 这种类似时间啊这种有点重复味 ...

  9. [SDOI2017]序列计数 (矩阵加速,小容斥)

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

随机推荐

  1. HTML JS 弹层后底部页面禁止滚动处理

    1.打开新页面时需要禁止鼠标滚轮,禁止页面滑动: 1 2 3 4 在调用显示层时加上这句js代码就可以了: document.documentElement.style.overflow = &quo ...

  2. Centos7安装Redis5.0.3

    1.切换目录 cd tmp 2.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz 3.解压,删除压缩包 tar xzf redi ...

  3. MySQL初识数据库

    为什要用数据库 第一,将文件和程序存在一台机器上是很不合理的. 第二,操作文件是一件很麻烦的事 你可以理解为 数据库 是一个可以在一台机器上独立工作的,并且可以给我们提供高效.便捷的方式对数据进行增删 ...

  4. Navicat连接的某个表一直加载并且不能关闭

    问题: 今天下午突然发现数据库的一张表一直加载,也出不来数据,并且也不能关闭.解决办法: 在Navicat中中执行如下命令: SHOW PROCESSLIST; 如果state列中有lock字眼,通过 ...

  5. JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  6. Tomcat配置 https SSL证书

    HTTP与HTTPS的区别:HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Soc ...

  7. 从JMS到KafKa

    从JMS到KafKa JMS (1)JMS概念 JMS(Java Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建.发 ...

  8. sql_monitor实时监控

    1 检查数据库是否启用了监控功能 1)检查参数:CONTROL_MANAGEMENT_PACK_ACCES SQL> show parameter CONTROL_MANAGEMENT_PACK ...

  9. RoP

    RoPS特征提取 RoPS为Rotational Projection Statistics的简写,即旋转投影统计特征.RoPS特征具有对点云旋转和平移(即姿态变化)的不变性,具备很强的鉴别力以及对噪 ...

  10. ssy-publish

    github地址: https://github.com/shangyueyue/ssy-publish 一.安装 npm install ssy-publish -D 二.在process.cwd( ...