正题


题目大意

有递推式fi=∏j=1kfi−jbjf_{i}=\prod_{j=1}^kf_{i-j}^{b_j}fi​=j=1∏k​fi−jbj​​

给出f1∼kf_{1\sim k}f1∼k​和b1∼kb_{1\sim k}b1∼k​

求fnf_nfn​


解题思路

首先这题的指数如此之大所以不能直接存,而指数又不能直接模所以我们要用欧拉定理
(b,p)=1(b,p)=1(b,p)=1
⇒ab≡ab%φ(p)(modp)\Rightarrow a^b\equiv a^{b\% \varphi(p)}(\rm mod\ p)⇒ab≡ab%φ(p)(mod p)
因为ppp为质数所以就是
⇒ab≡ab%(p−1)(modp)\Rightarrow a^b\equiv a^{b\% (p-1)}(\rm mod\ p)⇒ab≡ab%(p−1)(mod p)

然后对于答案肯定能表示成∏j=1kfkcj\prod_{j=1}^kf_k^{c_j}j=1∏k​fkcj​​

那么对于ccc我们就可以用矩阵乘法求了

然后我们用矩阵乘法,用矩阵GnG^nGn中(0,i)(0,i)(0,i)表示fnf_nfn​的cic_ici​。

然后用矩阵乘法快速幂直接计算出GnG^nGn即可。

时间复杂度:O(k3log⁡n+klog⁡p):O(k^3\log n+k\log p):O(k3logn+klogp)


codecodecode

#pragma GCC optimize(2)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int K=201,p=998244353,phi=998244352;
int n,k,answer,num[K],b[K];
struct matrix{ll a[K][K];bool flag[K][K];
}f,ans,c;
matrix operator*(const matrix &a,const matrix &b)
{memset(c.a,0,sizeof(c.a));for(register int i=0;i<k;i++)for(register int j=0;j<k;j++)for(register int K=0;K<k;K++)c.a[i][j]=(c.a[i][j]+a.a[i][K]*b.a[K][j])%phi;return c;
}
int ksm(int x,int b)
{int ans=1;while(b){if(b&1) ans=(ll)ans*x%p;x=(ll)x*x%p;b>>=1;}return ans;
}
int main()
{//freopen("seq.in","r",stdin);//freopen("seq.out","w",stdout);scanf("%d%d",&n,&k);for(int i=1;i<k;i++)f.a[i][i-1]=1;for(int i=0;i<k;i++){scanf("%d",&b[i]);f.a[0][i]=b[i];}for(int i=0;i<k;i++)scanf("%d",&num[i]);if(n<=k){printf("%d",num[n-1]);return 0;}ans=f;n=n-k-1;while(n){ if(n&1) ans=ans*f;f=f*f;n>>=1;}answer=1;for(int i=0;i<k;i++)answer=(ll)answer*ksm(num[k-i-1],ans.a[0][i])%p;printf("%d",answer);
}

jzoj6275-[NOIP提高组模拟1]小L的数列【矩阵乘法,欧拉定理】相关推荐

  1. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  2. JZOJ 5850. 【NOIP提高组模拟2018.8.25】e

    Description Input Output Sample Input 5 7 0 1 2 3 4 5 1 2 2 3 2 4 1 5 1 2 4 5 2 2 4 5 3 2 4 5 4 2 4 ...

  3. JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点

    Description Input Output Sample Input 4 4 2 a a b b a a b b c c d d c c d d 1 1 3 3 2 2 3 1 1 3 2 2 ...

  4. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  5. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  6. jzoj 5850.【NOIP提高组模拟2018.8.25】e 可持久化线段树+lca

    Description Input Output Data Constraint 分析: 最小连通块可以看作是所有点到他们的 lca l c a lca路径的并集,因为是取最小值,所以重复的不会有贡献 ...

  7. 第二届『Citric杯』NOIP提高组模拟赛

    一道防AK的好题 不得不吐槽这个题目背景和算法.这就是一脑筋急转弯啊. Code program hard; CONST FileName='hard'; var n,i,tot:longint;x, ...

  8. JZOJ6893. 【2020.11.25提高组模拟】小 T 与灵石(stone)题解

    这道题需要转化,换根和卡常. 首先将集合中的点拉出来,找它们的直径 不需要什么虚树,随便挑一个集合里的点为根,做一遍dfs,找最远点x(要在集合里),以x为根重复以上操作,找到最远点y,x-y就是题解 ...

  9. jzoj4787-[NOIP2016提高A组模拟9.17]数格子【矩阵乘法】

    正题 题目大意 求 1 × 2 1\times 2 1×2的方块铺满 4 × n 4\times n 4×n的方格方案总数. 解题思路 首先 当计算 f n f_n fn​时, 显然最后一排可以 ( ...

最新文章

  1. jmeter启动警告项解决方案
  2. 大学生智能汽车竞赛-讯飞智慧餐厅组别成绩公示!
  3. python mean函数_聚类算法 Mean-shift
  4. RStudio中,出现中文乱码问题的解决方案
  5. mysql update 几万 非常慢_mysqL update 太慢,求解决方法
  6. YAML基础知识及搭建一台简洁版guestbook
  7. 文档管理系统_云脉纸质文档管理系统怎么玩?
  8. 阿里巴巴对Java编程【注释规约】的规约
  9. mysql常用操作指令总结
  10. php常用mysql语句_PHP中常用到的一些MySQL语句
  11. 蚂蚁课堂:Consul搭建
  12. 苹果cms内核H5网页漫画小说系统
  13. 平均绝对误差(MAE)、对数平均绝对误差(LMAE)、指数平均绝对误差(EMAE)用法的不同与相似之处
  14. 人工智能如何被用于造福人类?
  15. CCNA-静态路由实验
  16. 2022年最新前端零基础学习路径
  17. Houdini学习笔记——【案例二】消散文字制作
  18. 毕业论文用什么流程图软件比较好?
  19. 了解常见的模拟器及交换机的基本配置
  20. ATM自动取款机程序设计

热门文章

  1. 手把手教你java快速过滤关键词
  2. arcgis xml 下载 切片_GIS开发:Arcgis的切片格式
  3. gif分解工具_Python之GIF图倒放,沙雕快乐源泉
  4. apk源码查看工具_如何查看Linux命令工具的源码?
  5. 非抢占式优先算法例题_非抢占短作业优先算法源代码(C语言)
  6. python中定制类_python定制类__str__(实例详解)
  7. 算法设计与分析——递归与分治策略——棋盘覆盖
  8. 软件构造学习笔记-第八周
  9. [剑指offer]面试题47:不用加减乘除做加法
  10. C++ class实现二叉树(完整代码,附非递归遍历)