链接:https://www.luogu.org/problemnew/show/P3702

题解:

碰到计数题都要想想容斥

就跟碰到最大值最小要想想二分一样

考虑没有一个数是质数

那就确定了每一个数的取值范围

那么dp方程很显然

然后构造矩阵来优化转移

可以发现每个决策时一样的 所以矩阵可以一列一列的复制

#include <bits/stdc++.h>
#pragma comment(linker,"/STACK:102400000,102400000")
#pragma G++ optimize (“O2”)
using namespace std;
#define ll long long
const ll maxn= 2e7+;
#define mo 20170408
ll k,n,m;
bool f[maxn+];
struct re{
ll jz1[][],jz2[][];
}a;
re tmp,c;
re XX(re x,re y)
{
memset(tmp.jz1,,sizeof(tmp.jz1));
memset(tmp.jz2,,sizeof(tmp.jz2));
for (ll i=;i<k;i++)
for (ll j=;j<k;j++)
for (ll p=;p<k;p++)
{
tmp.jz1[i][p]=(tmp.jz1[i][p]+x.jz1[i][j]*y.jz1[j][p])%mo;
tmp.jz2[i][p]=(tmp.jz2[i][p]+x.jz2[i][j]*y.jz2[j][p])%mo;
}
return(tmp);
}
re fastpow(ll x)
{
cout<<x<<endl;
if (x==) return(a);
c=fastpow(x/);
c=XX(c,c);
if (x%) c=XX(c,a);
return c;
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
cin>>n>>m>>k;
memset(f,,sizeof(f));
f[]=f[]=;
for (ll i=;i<=maxn;i++)
if (f[i])
{
ll j=;
while (j*i<=maxn)
{
f[j*i]=; j++;
}
}
for (ll i=;i<=m;i++)
if (!f[i])
{
a.jz1[((-i%k)+k)%k][]++;
}
for (ll i=;i<k;i++)
{
for (ll j=;j<k;j++)
a.jz1[j][i]=a.jz1[j-][i-];
a.jz1[][i]=a.jz1[k-][i-];
}
for (ll i=;i<=m;i++)
a.jz2[((-i%k)+k)%k][]++;
for (ll i=;i<k;i++)
{
for (ll j=;j<k;j++)
a.jz2[j][i]=a.jz2[j-][i-];
a.jz2[][i]=a.jz2[k-][i-];
}
re d=fastpow(n);
cout<<(d.jz2[][]-d.jz1[][]+mo)%mo;
return ;
}

sdoi<序列计数>的更多相关文章

  1. BZOJ4818 序列计数

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB Description Alice想要得到一个长度为n的序列,序列中的数都是 ...

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

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

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

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

  4. HDU 6348 序列计数 (树状数组 + DP)

    序列计数 Time Limit: 4500/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  5. luogu3702-[SDOI2017]序列计数

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

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

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

  7. P3702 [SDOI2017]序列计数

    P3702 [SDOI2017]序列计数 链接 分析: 首先可以容斥掉,用总的减去一个质数也没有的. 然后可以dp了,f[i][j]表示到第i个数,和在模p下是j的方案数,矩阵快速幂即可. 另一种方法 ...

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

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

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

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

随机推荐

  1. Socket 连接建立过程

    阻塞模式下: 1,客户端向服务器端发起请求建立连接时,服务器端只需要运行到 serverSocket = ); 客户端注册的  SelectionKey.OP_CONNECT 事件就能够发生. 也就是 ...

  2. python读取Excel文件。

    #!/usr/bin/python # -*- coding: utf-8 -*- from bs4 import BeautifulSoup import urllib.request import ...

  3. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...

  4. Postfix 邮件服务 - 基础服务

    环境 centos 6.5 x64 测试 IP:172.16.2.18 1.关闭selinux # cat /etc/selinux/config SELINUX=disabled 2.配置 ipta ...

  5. yo install generator-gulp-react遇到UNMET PEER DEPENDENCY问题

    最近在用yeoman下载下来的框架配置react环境 yo install generator-gulp-react安装框架包 遇到了 UNMET PEER DEPENDENCY问题 找不到依赖的gu ...

  6. SpringBootTest单元测试实战、SpringBoot测试进阶高级篇之MockMvc讲解

    1.@SpringBootTest单元测试实战 简介:讲解SpringBoot的单元测试 1.引入相关依赖 <!--springboot程序测试依赖,如果是自动创建项目默认添加--> &l ...

  7. Spring使用注解和struts集成

  8. pl/sql Devloper 关键字转为大写

    英文版: peferences-editor-keyword case -uppercase   中文版:

  9. SpringMVC使用HttpInvoker发布远程服务

    参考这篇文章https://www.cnblogs.com/fanqisoft/p/10283156.html 将提供者配置类中的 1 @Bean 2 public HessianServiceExp ...

  10. 单页应用 WebApp SPA 骨架 框架 路由 页面切换 转场

    这里收录三个同类产品,找到他们花了我不少时间呢. 张鑫旭写的mobilebone自述:mobile移动端,PC桌面端页面无刷新过场JS骨架,简单.专注!http://www.zhangxinxu.co ...