传送门


不考虑质数的条件,可以考虑到一个很明显的$DP:$设$f_{i,j}$表示选$i$个数,和$mod\ p=j$的方案数,显然是可以矩阵优化$DP$的。

而且转移矩阵是循环矩阵,所以可以只用第一行的数字代替整个矩阵。当然了这道题$p \leq 100$矩阵比较小也可以直接做。

然后考虑至少要一个质数的条件,发现就是所有数参与$DP$的答案减去所有合数参与$DP$的答案,两次算出来相减即可。

 #include<bits/stdc++.h>
 #define ll long long
 //This code is written by Itst
 using namespace std;

 inline int read(){
     ;
     char c = getchar();
     ;
     while(!isdigit(c)){
         if(c == '-')
             f = ;
         c = getchar();
     }
     while(isdigit(c)){
         a = (a << ) + (a << ) + (c ^ ');
         c = getchar();
     }
     return f ? -a : a;
 }

 ;
 int N , M , P , ans;
 ];
 struct matrix{
     ll a[];
     matrix(){memset(a ,  , sizeof(a));}
     inline ll& operator [](int x){return a[x];}
     matrix operator *(matrix b){
         matrix c;
          ; i < P ; ++i)
              ; j < P ; ++j)
                 c[i] += a[j] * b[i - j <  ? i - j + P : i - j];
          ; j < P ; ++j)
             c[j] %= MOD;
         return c;
     }
 }S , T , G;

 int main(){
 #ifndef ONLINE_JUDGE
     freopen("in" , "r" , stdin);
     //freopen("out" , "w" , stdout);
 #endif
     N = read();
     M = read();
     P = read();
      ; i < P && i <= M ; ++i)
         G[i % P] = (M - i) / P + (bool)i;
     S[] = ;
     T = G;
     int K = N;
     while(K){
         )
             S = S * T;
         T = T * T;
         K >>= ;
     }
     ans = S[];
      ; i <= M ; ++i)
         if(!nprime[i]){
             --G[i % P];
             for(int j = i ; j <= M / i ; ++j)
                 nprime[i * j] = ;
         }
     T = G;
     S = matrix();
     S[] = ;
     K = N;
     while(K){
         )
             S = S * T;
         T = T * T;
         K >>= ;
     }
     cout << (ans - S[] + MOD) % MOD;
     ;
 }

Luogu3702 SDOI2017 序列计数 矩阵DP的更多相关文章

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

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

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

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

  3. [Sdoi2017]序列计数 矩阵优化dp

    题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4818 思路 先考虑没有质数限制 dp是在同余系下的,所以\(f[i][j]\)表示前i个点, ...

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

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

  5. BZOJ 4818 [Sdoi2017]序列计数 ——矩阵乘法

    发现转移矩阵是一个循环矩阵. 然后循环矩阵乘以循环矩阵还是循环矩阵. 据说还有FFT并且更优的做法. 之后再看吧 #include <map> #include <cmath> ...

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

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

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

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

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

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

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

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

随机推荐

  1. 英文技术Podcast推荐 - 英语技术一起学

    Podcast(播客)是现在比较流行的音.视频RSS订阅媒体.跟大家分享一下我所关注的一些不错的英文技术podcast,大家感兴趣可以订阅,在关注国外最前沿的技术资讯的同时更加锻炼英文听力(有很多需要 ...

  2. win7x64上配置 vs2015

    win7 x64配置vs2015成功关键 1. 首先查看win7版本是否是sp1或以上: [计算机]----->[属性] 2. 将IE浏览器升级到IE11: IE11[百度网盘下载],提取码:[ ...

  3. 喜闻乐见-Activity生命周期

    Activity的生命周期,对于Android开发者来说,再熟悉不过了.但是我们接触到的资料,绝大部分都只是谈了一些表面上的东西,例如各个回调的顺序等等.本文试图换个角度来讲解,也希望对各位读者有所帮 ...

  4. 英雄无敌HoMM3-死亡阴影SOD-神之苏醒WOG-封神NABI-MOD等相关文件

    英雄无敌HoMM3:死亡阴影SOD 英雄无敌3之死亡阴影(Heroes of Might and Magic III: Shadow of Death,简记为HoMM III: SOD)发行于1999 ...

  5. mybatis学习系列五--插件及类型处理器

    2 插件编写(80-81) 单个插件编写 2.1实现interceptor接口(ibatis) invocation.proceed()方法执行必须要有,否则不会无法实现拦截作用 2.2 使用@int ...

  6. Linux Mint Mate 常用

    Linux Mint基于Ubuntu  Mate 桌面版据说资源占用较少 http://mirrors.tuna.tsinghua.edu.cn/linuxmint-cd/stable/17.3/li ...

  7. Chrome_浏览器开发人员工具

    Google Chrome 浏览器开发人员工具,让网页开发变得更轻松 无论是 IE 6/7 的 Internet Explorer Developer Toolbar 或者是 IE 8 自带的 Dev ...

  8. [20180327]行迁移与ITL浪费.txt

    [20180327]行迁移与ITL浪费.txt --//生产系统遇到的一个问题,增加一个字段到表结构,修改数据字典,导致出现行迁移,而更加严重的是没有修改pctfree值,--//以后的业务操作,依旧 ...

  9. <转>通过反射获取Form/MenuStrip/ContextMenuStrip等列表

    private void button1_Click(object sender, EventArgs e) { treeView1.Nodes.Clear(); Assembly a = Assem ...

  10. Sudoku 个人项目1

    Github项目地址:Github 项目相关要求 随机构造出N个不重复的已解答的数独棋盘(0 < N <= 1000000) 在生成数独矩阵时,左上角的第一个数为:(学号后两位相加)% 9 ...