这个题真心是矩乘裸题,和上一个题基本一毛一样,稍微做一些矩乘题就可以轻松搞出、(然而我并不轻松)

看到倍数就应该想到余数转移,看到10^2就应该想到n^3的矩乘、所以直接全部-全合数两遍跑完即可

30s时限,卡得很死(bzoj慢的要死,不开o2

dev的调试坏了、重载乘号直接卡主不动崩溃了好几次、

然后这题卡10^7的int   所以欧拉筛和桶就共用一个了、

码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define M 20170408
#define N 20000009
int n,m,tot,tong[N],i,j,k,p,ans;
bool he[N];
void eular()
{for(int i=2;i<=m;i++){if(!he[i]){tong[++tot]=i;}for(int j=1;i*tong[j]<=m&&j<=tot;j++){int k=tong[j]*i;he[k]=1;if(i%tong[j]==0)break;}}
}
struct jz
{int p[105][105],c,k;
}a,b,u,v;
jz operator *(jz x,jz y)
{  int i,j,k;  for(i=0;i<=x.k;i++)  for(j=0;j<=y.c;j++)  u.p[i][j]=0;  u.k=x.k;  u.c=x.c;  for(i=0;i<=x.k;i++)  for(j=0;j<=x.c;j++)   for(k=0;k<=y.c;k++)  u.p[i][k]=(u.p[i][k]+1ll*x.p[i][j]*y.p[j][k]%M)%M;  return u;
}
jz operator ^(jz x,int ci)
{  int i,j,k;  v.k=x.k;  v.c=x.c;  for(i=0;i<=x.k;i++)  for(j=0;j<=x.c;j++)  if(i==j)v.p[i][i]=1;else v.p[i][j]=0;  while(ci)  {  if(ci&1)v=v*x;    ci>>=1;  x=x*x;        }  return v;
}
int main()
{scanf("%d%d%d",&n,&m,&p);a.k=p-1;b.c=p-1;b.k=p-1;for(i=1;i<=m;i++){tong[i%p]++;}for(i=0;i<p;i++)for(j=0;j<p;j++){b.p[(j+i)%p][i]+=tong[j];}n--;for(i=1;i<=m;i++)a.p[i%p][0]++;a=(b^n)*a;ans+=a.p[0][0];eular();memset(tong,0,sizeof(tong));for(i=0;i<p;i++)for(j=0;j<p;j++)b.p[i][j]=a.p[i][j]=0;for(i=1;i<=m;i++){if(he[i]||i==1)tong[i%p]++;}for(i=0;i<p;i++)for(j=0;j<p;j++){b.p[(j+i)%p][i]+=tong[j];}for(i=1;i<=m;i++)if(he[i]||i==1)a.p[i%p][0]++;a=(b^n)*a;ans-=a.p[0][0];ans=(ans%M+M)%M;printf("%d",ans);
}

2017.8.7 序列计数 思考记录相关推荐

  1. 2017.9.13 序列维护 思考记录

    终于不对拍1A线段树了.太不容易了 虽然这题挺裸的,省选福利,记住先乘后加的原则就可以搞了 注意位运算和取模的优先级,不要乱了,注意代码的位置问题 码(发现我的线段树非常瘦): #include< ...

  2. 2017.9.13 序列统计 思考记录

    这题.打表找规律成功的典型,分分钟找到组合数 首先列出展开表,然后找组合数: 要注意的就是连加的组合数可以加起来考虑和,不要老想着对一堆组合数找数字规律, 码: #include<iostrea ...

  3. 2017.9.10 序列操作 思考记录

    唉,怎么说呢.pushdown要注意的事全忘光了.写+调竟然花了两个小时. 要注意反转时是^1而不是=1! 下传标记不要单纯管顺序,因为没有任何意义,要确保在任意时刻一个点只有一种同级标记!!比如赋值 ...

  4. 2017.3.24 分裂游戏 思考记录

    事先说明:这不是好题解,这只是思考记录 同机房的xp都学博弈了..    感觉还是学学看吧 先来看一下简单的nim: 题目: Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个 ...

  5. 2017.9.26 块的计数 思考记录

    这种题就属于那种描述很简单,要求很简单,但就是无从下手的题 这个题我只有n根n做法..枚举因数检验.. 首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置- ...

  6. 2017.5.9 积木大赛 思考记录

    为什么要把这个题放上来?因为这个题还是很有代表性的 首先必须要跳出模拟的思考: 可以忽视每一步具体的操作,直接看目标,这样就会总结出一些规律: 连续上升或连续下降的序列次数一定是最大值,因为每次都可以 ...

  7. 2017.3.6 地精部落 思考记录

    其实这个题第一眼是没有任何思路的 强行无视题解,经过漫长的找规律,终于推出了一个可行的方法: f[i][0/1]i表示最高位的数字,0表示开始是上升,1表示开始是下降. 为什么会推出这个? 1.因为所 ...

  8. 2017.10.13 硬币游戏 思考记录

    这个题用特征法可以比较好的找到思路 首先这个题有两个特征:1.正+反=反   反+正=反  正+正=正  反+反=正   应该能很快想到亦或 2.范围1e5  +  上限2^60   应该能很快想到倍 ...

  9. 2017.9.28 约数研究 思考记录

    这个题一开始可能会想复杂, 然而它需要对答案的贡献进行归类 可以发现,一个约数对其倍数的数贡献是一样的,,所以可以考虑离散 所以直接对于每个数不好求,就可以考虑每个约数的贡献 而每个约数i就有n/i个 ...

最新文章

  1. 对话嬴彻科技CEO马喆人:L3才是自动驾驶货运的本质拐点
  2. Apache Ignite(五):Ignite的集群部署
  3. python中字符串编码转换
  4. 如何删除微软账户下的历史头像,及恢复默认头像
  5. 2Ubuntu/RedHat下nfs服务器搭建,Linux多台电脑共享目录
  6. windows下 wgl 创建渲染上下文步骤
  7. 论文浅尝 | 利用 KG Embedding 进行问题回答
  8. CF1041F Ray in the tube构造_思维
  9. Python爬虫实战01:Requests+正则表达式爬取猫眼电影
  10. oracle的ebs系统,EBS系统简介
  11. arm-4-裸板开发
  12. java实时百分比进度条_Java 进度条百分比简单算法,根据数据量计算
  13. 软件测试习题(附答案)
  14. 1、Linux软件源配置操作
  15. 【Android】移动端接入Cronet实践
  16. 皮克定理和任意多边形的面积公式
  17. 【安安教具】-【数学】-【一阶线性齐次方程】模拟器 教你如何用python制作一阶线性齐次方程模拟器 python项目小发明
  18. 10月10日~10月17 产品资讯
  19. 海思芯片中VI的DEV和chan的概念
  20. 开始学习Java啦!

热门文章

  1. 设计模式笔记二十:观察者模式 |更新版
  2. 脉冲神经元的膜电位释放方式,分为hard和soft两种
  3. Spyder里面好像不能用汉字
  4. 与素数有关的一些性质及证明(一)
  5. python processpoolexector 释放内存_python之ThreadPoolExecutor
  6. 【IDEA工具设置】解决控制台中文输出乱码问题
  7. tomcat下多个app 不同的图标_iOS平台设计规范(五)图标与图片
  8. c语言实力,排序算法(更新ing)(C语言实现)(认真的不像实力派)
  9. java logic逻辑,logicJava的复习
  10. rsa前后端加密流程_不懂前后端分离?这篇就够了