如果写过 LJJ 学二项式那道题的话这道题就不难了.

#include <bits/stdc++.h>
#define ll long long
#define setIO(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
using namespace std;
int K,bu[10000],G;
ll Mod,N;
struct M
{
ll a[2][2];
M () { memset(a,0,sizeof(a));}
ll * operator [] (const int &x) { return a[x]; }
M operator * (const M &b) const
{
M c;
int i,j,k;
for(i=0;i<2;++i) for(j=0;j<2;++j) for(k=0;k<2;++k) c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j]%Mod)%Mod;
return c;
}
}A,W;
inline ll pow_N(ll x,ll y)
{
ll tmp=1ll;
for(;y;y>>=1,x=x*x%Mod) if(y&1) tmp=tmp*x%Mod;
return tmp;
}
inline void pow_M(ll y)
{
while(y)
{
if(y&1) A=A*W;
y>>=1;
W=W*W;
}
}
inline int get_G()
{
ll tmp=Mod-1;
int i,j,cnt=0;
for(i=2;i*i<=tmp;++i)
{
if(tmp%i==0)
{
bu[++cnt]=i;
while(tmp%i==0) tmp/=i;
}
}
if(tmp>1) bu[++cnt]=tmp;
for(G=2;;++G)
{
int flag=1;
for(j=1;j<=cnt;++j) if(pow_N(G,(Mod-1)/bu[j])==1) { flag=0; break; }
if(flag==1) break;
}
}
void solve()
{
int i,j;
scanf("%lld%d%lld",&N,&K,&Mod);
get_G();
ll wn=pow_N(G,(Mod-1)/K),t,ans=0;
for(i=0;i<=K-1;++i)
{
A[0][0]=1,A[1][1]=A[0][1]=A[1][0]=0;
t=pow_N(wn,Mod-1-i);
W[0][0]=W[1][0]=W[0][1]=1,W[0][0]+=t,W[1][1]=t;
pow_M(N);
t=A[0][0];
ans=(ans+t*pow_N(wn,N%(Mod-1)*i))%Mod;
}
printf("%lld\n",ans*pow_N(K,Mod-2)%Mod);
}
int main()
{
// setIO("input");
int i,j,T;
scanf("%d",&T);
while(T--) solve();
return 0;
}

BZOJ 3328: PYXFIB 单位根反演+矩阵乘法+二项式定理的更多相关文章

  1. bzoj 3328 PYXFIB——单位根反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演主要就是有 \( [k|n] = \frac{1}{k}\sum\limit ...

  2. bzoj 3328 PYXFIB —— 单位根反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演,主要用到了 \( [k|n] = \frac{1}{k} \sum\lim ...

  3. BZOJ 3328: PYXFIB 解题报告

    BZOJ 3328: PYXFIB 题意 给定\(n,p,k(1\le n\le 10^{18},1\le k\le 20000,1\le p\le 10^9,p \ is \ prime,k|(p- ...

  4. bzoj3328: PYXFIB(单位根反演+矩阵快速幂)

    题面 传送门 题解 我们设\(A=\begin{bmatrix}1 & 1 \\ 1 & 0\end{bmatrix}\),那么\(A^n\)的左上角就是\(F\)的第\(n\)项 所 ...

  5. BZOJ3328 PYXFIB 单位根反演

    题意:求 \[ \sum_{i=0}^n[k|i]\binom{n}{i}Fib(i) \] 斐波那契数列有简单的矩阵上的通项公式\(Fib(n)=A^n_{1,1}\).代入得 \[ =\sum_{ ...

  6. bzoj 3328: PYXFIB 数论

    3328: PYXFIB Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 130  Solved: 41[Submit][Status][Discuss ...

  7. BZOJ 1898: [Zjoi2004]Swamp 沼泽鳄鱼(矩阵乘法)

    可以发现,如果没有鳄鱼,那么就是裸地一道题,但是可以发现鳄鱼最多每12次重复,那么就少于12的那部分dp,其他的就矩阵乘法就行了 PS:第一次吧矩阵乘法AC了好开心QAQ CODE: #include ...

  8. bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】

    1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...

  9. BZOJ 3329 Xorequ 数字DP+矩阵乘法

    标题效果:特定n,乞讨[1,n]内[1,2^n]差多少x满足x^3x=2x x^3x=2x相当于x^2x = 3x 和3x=x+2x 和2x=x<<1 因此x满足条件IFFx&(x ...

随机推荐

  1. (四)pdf的构成之文件体(树图)

    pdf的文件体类似于一个大树 有个根对象(catalog),该对象中保存着PDF的很多基本信息,并通过间接引用,辐射到所有的间接对象. (下图是大概的树形状)

  2. Spark 系列(六)—— 累加器与广播变量

    一.简介 在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: ...

  3. Restful与Spring MVC

    Spring工作流程: 文件上传的处理: 解析参数的过滤器: <filter> <filter-name>MultipartFilter</filter-name> ...

  4. python day 12: 选课系统

    目录 python day 12 1. 通过类来创建选课系统 1.1 类库models.py 2. 配置文件setting.py 3. administrator.py 4. student.py p ...

  5. SQL 基本概念、通用语法与分类

    一.SQL 概念  1.什么是 SQL Structured  Query Language 结构化查询语句 2.SQL 作用 (1)是一种所有关系型数据库的查询规范,不同的数据库都支持. (2)通用 ...

  6. RabbitMQ实战场景(一):异步记录用户操作日志

    传统的项目开发中业务流程以串行方式,执行了模块1—>模块2–>模块3 而我们知道,这个执行流程其实对于整个程序来讲是有一定的弊端的,主要有几点: (1)整个流程的执行响应等待时间比较长; ...

  7. 【亲测有效】安装npm慢的解决方案

    使用淘宝的NPM库:npm install -gd express --registry=http://registry.npm.taobao.org

  8. springBoot集成Redis,RedisTmple操作redis和注解实现添加和清空缓存功能

    配置 maven项目进入相关配置 <dependency>    <groupId>org.springframework.boot</groupId>    &l ...

  9. FastDFS+Nginx搭建Java分布式文件系统

    一.FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS ...

  10. maven cmd 命令

    1. mvn clean install :重新清理打包 2.详见:https://www.cnblogs.com/lukelook/p/11298168.html mvn  versions:upd ...