BZOJ 3328: PYXFIB 单位根反演+矩阵乘法+二项式定理
如果写过 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 单位根反演+矩阵乘法+二项式定理的更多相关文章
- bzoj 3328 PYXFIB——单位根反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演主要就是有 \( [k|n] = \frac{1}{k}\sum\limit ...
- bzoj 3328 PYXFIB —— 单位根反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演,主要用到了 \( [k|n] = \frac{1}{k} \sum\lim ...
- 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- ...
- bzoj3328: PYXFIB(单位根反演+矩阵快速幂)
题面 传送门 题解 我们设\(A=\begin{bmatrix}1 & 1 \\ 1 & 0\end{bmatrix}\),那么\(A^n\)的左上角就是\(F\)的第\(n\)项 所 ...
- BZOJ3328 PYXFIB 单位根反演
题意:求 \[ \sum_{i=0}^n[k|i]\binom{n}{i}Fib(i) \] 斐波那契数列有简单的矩阵上的通项公式\(Fib(n)=A^n_{1,1}\).代入得 \[ =\sum_{ ...
- bzoj 3328: PYXFIB 数论
3328: PYXFIB Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 130 Solved: 41[Submit][Status][Discuss ...
- BZOJ 1898: [Zjoi2004]Swamp 沼泽鳄鱼(矩阵乘法)
可以发现,如果没有鳄鱼,那么就是裸地一道题,但是可以发现鳄鱼最多每12次重复,那么就少于12的那部分dp,其他的就矩阵乘法就行了 PS:第一次吧矩阵乘法AC了好开心QAQ CODE: #include ...
- bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】
1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...
- 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 ...
随机推荐
- 【微信小程序学习笔记】入门与了解
[微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...
- 《Docker Deep Dive》Note - Docker 引擎
<Docker Deep Dive>Note Docker 引擎 1. 概览 graph TB A(Docker client) --- B(daemon) subgraph Docker ...
- 【LEETCODE】55、数组分类,适中级别,题目:79、611、950
第950题,这题我是真的没想到居然会说使用队列去做,大神的答案,拿过来瞻仰一下 package y2019.Algorithm.array; import java.util.HashMap; imp ...
- 终于明白六大类UML类图关系了
UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...
- python爬虫-喜马拉雅_晚安妈妈睡前故事
这里先说下思路: 1.首先要获取当前书的音频信息 '''获取当前书的音频信息''' all_list = [] for url in self.book_url: r = requests.get(u ...
- [洛谷U72177]火星人plus
题目大意:给你一个$1\sim n(n\leqslant 10^5)$的排列,设$a$为它在$1\sim n$的全排列中的排名,求在$1\sim n$的全排列中第$a+m$个排列. 题解:康托展开以及 ...
- JXOI2018
发现自己不会T3可以退群了 排序问题(组合.模拟) 可以发现Gobo Sort相当于在所有排列中随机选择一个,所以当第\(i\)个数出现次数为\(a_i\)时,期望的Sort次数就是\(\frac{( ...
- catch SocketException
https://stackoverflow.com/questions/32810051/cannot-catch-socketexception/32810079#32810079 https:// ...
- element-ui日期筛选:选择日期即触发查询
需求:日期范围选择器,当选择好一个日期范围时,立即触发查询功能 <el-date-picker v-model="dateVal" type="daterange& ...
- JS权威指南读书笔记(五)
第十三章 Web浏览器中的JavaScript 1 在Html文档中嵌入客户端4种JS代码方法 a 内联方式,放置在<script>标签之间 b 放置在<script ...