题目链接


分析

考虑容斥,用总方案减去全是合数的方案数,

可以发现 \(n\) 很大,\(p\) 很小,直接用矩阵乘法转移即可


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int mod=20170408; bool v[mod];
struct maix{int p[100][100];}A0,A1,ANS0,ANS1;
int n,m,k,prime[1300011],Cnt,c0[100],c1[100];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline void mul(maix &A,maix B){
rr maix C;
for (rr int i=0;i<k;++i)
for (rr int j=0;j<k;++j){
C.p[i][j]=0;
for (rr int o=0;o<k;++o)
C.p[i][j]=mo(C.p[i][j],1ll*A.p[i][o]*B.p[o][j]%mod);
}
for (rr int i=0;i<k;++i)
for (rr int j=0;j<k;++j)
A.p[i][j]=C.p[i][j];
}
signed main(){
scanf("%d%d%d",&n,&m,&k),v[1]=1;
for (rr int i=2;i<=m;++i){
if (!v[i]) prime[++Cnt]=i;
for (rr int j=1;j<=Cnt&&prime[j]<=m/i;++j){
v[i*prime[j]]=1;
if (i%prime[j]==0) break;
}
}
for (rr int i=1;i<=m;++i) ++c0[i%k];
for (rr int i=1;i<=m;++i) if (v[i]) ++c1[i%k];
for (rr int i=0;i<k;++i)
for (rr int j=0;j<k;++j)
A0.p[i][(i+j)%k]=c0[j],A1.p[i][(i+j)%k]=c1[j];
ANS0.p[0][0]=ANS1.p[0][0]=1;
for (;n;n>>=1,mul(A0,A0),mul(A1,A1))
if (n&1) mul(ANS0,A0),mul(ANS1,A1);
return !printf("%d",mo(ANS0.p[0][0],mod-ANS1.p[0][0]));
}

#矩阵乘法#洛谷 3702 [SDOI2017]序列计数的更多相关文章

  1. 洛谷P3702 [SDOI2017]序列计数

    题目大意: Alice想要得到一个长度为\(n\)的序列,序列中的数都是不超过\(m\)的正整数,而且这\(n\)个数的和是\(p\)的倍数. Alice还希望,这\(n\)个数中,至少有一个数是质数 ...

  2. luogu 3702 [SDOI2017]序列计数 矩阵乘法+容斥

    现在看来这道题真的不难啊~ 正着求不好求,那就反着求:答案=总-全不是质数 这里有一个细节要特判:1不是质数,所以在算全不是质数的时候要特判1 code: #include <bits/stdc ...

  3. Luogu 3702 [SDOI2017]序列计数

    BZOJ 4818 感觉不难. 首先转化一下题目,“至少有一个质数”$=$“全部方案”$ - $“一个质数也没有”. 注意到$m \leq 2e7$,$[1, m]$内的质数可以直接筛出来. 设$f_ ...

  4. 洛咕 P3702 [SDOI2017]序列计数

    和https://www.cnblogs.com/xzz_233/p/10060753.html一样,都是多项式快速幂,还比那个题水. 设\(a[i]\)表示\([1,m]\)中$ \mod p\(余 ...

  5. BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. win32-CreateDIBSection的使用

    使用CreateDIBSection 可以创建一个设备无关位图 #include <windows.h> using namespace std; int main() { HDC hdc ...

  2. 项目实战:Qt+iMax6生命探测仪(探测障碍物、静止目标、动态目标、生命目标、探测半径、探测前方雷达显示、动态目标轨迹显示、探测热力图、探测过程存储与回放)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110994486长期持续带来更多项目与技术分享, ...

  3. Retrofit 的基本用法

    一.添加依赖和网络权限 添加依赖 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup ...

  4. .NET 链接数据库:证书链是由不受信任的颁发机构颁发的

    错误信息 证书链是由不受信任的颁发机构颁发的 错误环境 .NET web.config链接数据库(发布到服务)时报错 解决方法 下面配置标红部分在你的代码配置中增加或者修改 <add name= ...

  5. 【Java复健指南11】OOP高级02-代码块、单例设计和final关键字

    代码块 定义 代码化块又称为初始化块,属于类中的成员[即是类的一部分]. 类似于方法,将逻辑语句封装在方法体中,通过{}包围起来. 但和方法不同,没有方法名,没有返回,没有参数,只有方法体, 而且不用 ...

  6. 【Azure Redis】Redis导入备份文件(RDB)失败的原因

    问题描述 在测试Azure Redis的导入/导出备份文件的功能中,突然发现在Redis 4.0上导入的时候,一直报错. 问题解答 因为门户上只是显示导入失败,没有任何错误消息说明.根据常理推断,Re ...

  7. 【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)

    问题描述 在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP. 解决方案 ...

  8. 【Azure 应用服务】App Service For Linux 环境中,如何修改 Nginx 配置中 server_name的默认值 example.com

    问题描述 在App Service for Linux环境中,部署PHP应用,使用Nginx服务器.因为PHP应用中所有静态资源的URL使用的默认域名为 https://example.com:808 ...

  9. 开源:Taurus.Idempotent 分布式幂等性锁框架,支持 .Net 和 .Net Core 双系列版本

    分布式幂等性锁介绍: 分布式幂等性框架的作用是确保在分布式系统中的操作具有幂等性,即无论操作被重复执行多少次,最终的结果都是一致的.幂等性是指对同一操作的多次执行所产生的效果与仅执行一次的效果相同. ...

  10. Java 类的结构之三 :构造器(或构造方法,constructor)的使用

    1 /* 2 * 类的结构之三 :构造器(或构造方法,constructor)的使用 3 * construct:建设 建造 4 * 5 * 一.构造器的作用: 6 * 创建对象 7 * 初始化对象的 ...