4818: [Sdoi2017]序列计数

Time Limit: 30 Sec  Memory Limit: 128 MB
Submit: 560  Solved: 359

Description

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

Input

一行三个数,n,m,p。
1<=n<=10^9,1<=m<=2×10^7,1<=p<=100

Output

一行一个数,满足Alice的要求的序列数量,答案对20170408取模。

Sample Input

3 5 3

Sample Output

33

HINT

Source

【分析】

  f[i][j]表示填i个数,mod为j的方案数。

  这个转移可以用矩阵加速啦,那么n很大也没关系了。

  然后要至少有一个质数,就用总方案数-没有一个质数。

  然后一开始跑20s,看到别人2s,然后觉得这个循环矩阵的矩阵乘法可以O(n^2),改了就2s了。。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
#define Maxn 20000010
#define Mod 20170408 int pri[Maxn],pl;
bool vis[Maxn]; void init(int n)
{
for(int i=;i<=n;i++) vis[i]=;
pl=;vis[]=;
for(int i=;i<=n;i++)
{
if(!vis[i]) pri[++pl]=i;
for(int j=;j<=pl;j++)
{
if(pri[j]*i>n) break;
vis[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
} int sm[],p; struct Matrix
{
int w[][];
Matrix() {memset(w,,sizeof(w));}
friend Matrix operator * (Matrix x,Matrix y)
{
Matrix ret;
for(int k=;k<p;k++)
{
// for(int i=0;i<p;i++)
for(int j=;j<p;j++)
{
ret.w[][j]=(ret.w[][j]+1LL*x.w[][k]*y.w[k][j]%Mod)%Mod;
}
}
for(int i=;i<p;i++)
{
for(int j=;j<p;j++) ret.w[i][(j+i)%p]=ret.w[][j];
}
return ret;
}
friend Matrix operator ^ (Matrix x,int b)
{
Matrix ret;
for(int i=;i<p;i++) ret.w[i][i]=;
while(b)
{
if(b&) ret=ret*x;
x=x*x;
b>>=;
}
return ret;
}
}; int main()
{
int n,m;
scanf("%d%d%d",&n,&m,&p);
init(m);
for(int i=;i<p;i++) sm[p]=;
Matrix nw;
for(int i=;i<=m;i++) sm[i%p]++;
for(int i=;i<p;i++) for(int j=;j<p;j++) (nw.w[i][(i+j)%p]+=sm[j])%Mod;
nw=nw^n;
int ans=nw.w[][]; for(int i=;i<=m;i++) if(!vis[i]) sm[i%p]--;
memset(nw.w,,sizeof(nw.w));
for(int i=;i<p;i++) for(int j=;j<p;j++) (nw.w[i][(i+j)%p]+=sm[j])%Mod;
nw=nw^n;
ans=((ans-nw.w[][])%Mod+Mod)%Mod; printf("%d\n",ans);
return ;
}

2017-04-28 10:51:39

【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)的更多相关文章

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

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

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

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

  3. 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]

    序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...

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

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

  5. [BZOJ 2326] [HNOI2011] 数学作业 【矩阵乘法】

    题目链接:BZOJ - 2326 题目分析 数据范围达到了 10^18 ,显然需要矩阵乘法了! 可以发现,向数字尾部添加一个数字 x 的过程就是 Num = Num * 10^k + x .其中 k ...

  6. bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...

  7. bzoj 2553: [BeiJing2011]禁忌 AC自动机+矩阵乘法

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2553 题解: 利用AC自动机的dp求出所有的转移 然后将所有的转移储存到矩阵中,进行矩阵 ...

  8. BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法

    注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...

  9. bzoj 3329: Xorequ【数位dp+矩阵乘法】

    注意第一问不取模!!! 因为a+b=a|b+a&b,a^b=a|b-a&b,所以a+b=a^b+2(a&b) x^3x==2x可根据异或的性质以转成x^2x==3x,根据上面的 ...

随机推荐

  1. vim基本技巧

    一.无插件vim使用 1.查看修改代码 1)光标移动 h j k l    前下上后 w b       词首.词尾 ^ $       句首.句尾 2)编辑 x d r y p a i o .   ...

  2. Tomcat get 中文乱码

    乱码问题 原因: tomcat默认的在url传输时是用iso8859-1编码. 解决方案一: 在使用get传输参数时,将参数中的中文转换成url格式,也就是使用urlEncode和urlDecode来 ...

  3. Angular2新人常犯的5个错误

    看到这儿,我猜你肯定已经看过一些博客.技术大会录像了,现在应该已经准备好踏上angular2这条不归路了吧!那么上路后,哪些东西是我们需要知道的? 下面就是一些新手常见错误汇总,当你要开始自己的ang ...

  4. websocket知识简单总结!

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装

    相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...

  6. 使用maven命令终端构建一个web项目及发布该项目

    构建环境: maven版本:3.3.9 系统平台:Windows7 x64 JDK版本:1.7 构建步骤: 1.打开maven安装目录,在地址栏输入cmd进入命令窗口 2.输入命令mvn archet ...

  7. jenkins之参数化构建

    事件背景: 今天一早接到一个需求,说要jenkins持续集成,输入自定义URL,然后完成回归测试,当时有点蒙,不知道如何下手,听群里的大神思路后豁然开朗,就记录了下 一.先安装插件 插件: [Buil ...

  8. 小白学习安全测试(二)——httrack的安装和使用

    httrack是一款免费的网站镜像程序,简单理解就是可以在网站结构(网页及一些主要信息文件),下载到本地,可离线浏览,我是按照搭建成功后的console直译过来的 下面说下安装: 我都是在Linux环 ...

  9. ldconfig命令与ldd命令

    ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令 ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令. ...

  10. 【oracle】入门学习(一)

    一直想学oracle但都没有下定决心.这次借了书,一定要学好oracle. 目前学习 <Oracle从入门到精通> 明日科技 的Oracle 11g 版本 关系型数据库的基本理论 数据模型 ...