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 ...
随机推荐
- leetcode最长回文
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- Windows下Charles抓包https协议配置
最近设置https协议对手机app抓包遇到一些问题,现在在这里记录下,以防以后遇到问题没有记录 1.从官网下载Charles的安装包 https://www.charlesproxy.com/down ...
- 【LEETCODE】41、905. Sort Array By Parity
package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...
- Spring RestTemplate的使用示例
@Bean注册一个RestTemplate: 调用服务: 因为要参与网络传输,所以要实现序列化接口:
- scrapy爬取相似页面及回调爬取问题(以慕课网为例)
以爬取慕课网数据为例 慕课网的数据很简单,就是通过get方式获取的 连接地址为https://www.imooc.com/course/list?page=2 根据page参数来分页
- Jmeter 接口测试之MD5加密函数(函数助手篇)
转自:https://blog.csdn.net/hhyangel372/article/details/81571058 本文给大家介绍一下如何使用Jmeter自带的函数对常量和变量进行简单的加密处 ...
- C#代码常用技巧
1.拼sql语句时,list中元素加单引号并以逗号分开:string.Join(",",list.Select(r=>"'"+r+"'" ...
- [转]HTTP Error 500.21 - Internal Server Error Handler "ExtensionlessUrlHandler-Integrated-4.0" has a bad module "ManagedPipelineHandler" in its module list
1.错误 HTTP Error 500.21 - Internal Server Error Handler "ExtensionlessUrlHandler-Integrated-4.0& ...
- Python_爬虫小实例
爬虫小实例 一.问题描述与分析 Q:查询某一只股票,在百度搜索页面的结果的个数以及搜索结果的变化. 分析: 搜索结果个数如下图: 搜索结果的变化:通过观察可以看到,每个一段时间搜索结果的个数是有所变化 ...
- 平衡二叉树详解——PHP代码实现
一.什么是平衡二叉树 平衡二叉树(Self-Balancing Binary Search Tree 或者 Height-Balancing Binary Search Tree)译为 自平衡的二叉查 ...