题目分析:

这题的目标是求$$ \sum_{i \in [0,n),k \mid i} \binom{n}{i}G^i $$

这个形式很像单位根反演。

单位根反演一般用于求:$ \sum_{i \in [0,n),k \mid i} \binom{n}{i}f(x)^i $

推理过程略,实际上也就是交换求和符号的事情。

接着就变成裸的矩阵快速幂了

代码:

 #include<bits/stdc++.h>
using namespace std; int m,k,p;long long n;
int l,s,t,gg; struct mat{int arr[][];}G,bs,mmp;
vector<int> fac; // factor of p void buildbase(int w){
for(int i=;i<=m;i++)
for(int j=;j<=m;j++) bs.arr[i][j] = 1ll*w*G.arr[i][j]%p;
for(int i=;i<=m;i++) bs.arr[i][i] ++,bs.arr[i][i] %= p;
} mat operator*(mat alpha,mat beta){
memset(mmp.arr,,sizeof(mmp.arr));
for(int k=;k<=m;k++){
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
mmp.arr[i][j] += 1ll*alpha.arr[i][k]*beta.arr[k][j]%p;
mmp.arr[i][j] %= p;
}
}
}
return mmp;
} mat res;
mat fstpow(mat now,long long pw){
memset(res.arr,,sizeof(res.arr));
for(int i=;i<=m;i++) res.arr[i][i] = ;
long long bit = ;
while(bit <= pw){
if(bit & pw){res = res*bs;}
bs = bs*bs;bit<<=;
}
return res;
} void init(){
memset(G.arr,,sizeof(G.arr));
fac.clear();
l = s = t = gg = ;
} void read(){
scanf("%d%d%d",&l,&s,&t);
for(int i=;i<=l;i++){
int u,v; scanf("%d%d",&u,&v);
G.arr[u][v]++;
}
} int fast_pow(int now,int pw){
int ans = ,dt = now,bit = ;
while(bit <= pw){
if(bit & pw){ans = 1ll*ans*dt%p;}
dt = 1ll*dt*dt%p; bit<<=;
}
return ans;
} void getgg(){
int z = p-;
for(int i=;i*i<=z;i++){
if(z % i == ){
fac.push_back(i);
while(z % i == ) z /= i;
}
}
if(z != ) fac.push_back(z);
for(int i=;i<=p;i++){
int flag = true;
for(int j=;j<fac.size();j++){
int z = fast_pow(i,(p-)/fac[j]);
if(z == ){flag = false; break;}
}
if(flag){gg = i;break;}
}
gg = fast_pow(gg,(p-)/k);
} void work(){
int w = ,ans = ;
for(int i=;i<k;i++,w = 1ll*w*gg%p){
buildbase(w);
bs = fstpow(bs,n);
ans += bs.arr[s][t]; ans%=p;
}
ans = 1ll*ans*fast_pow(k,p-)%p;
printf("%d\n",ans);
} int main(){
while(scanf("%d%lld%d%d",&m,&n,&k,&p) == ){
init();
read();
getgg();
work();
}
return ;
}

POJChallengeRound2 Guideposts 【单位根反演】【快速幂】的更多相关文章

  1. 【BZOJ3328】PYXFIB(单位根反演,矩阵快速幂)

    [BZOJ3328]PYXFIB(单位根反演,矩阵快速幂) 题面 BZOJ 题解 首先要求的式子是:\(\displaystyle \sum_{i=0}^n [k|i]{n\choose i}f_i\ ...

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

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

  3. 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)

    \(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...

  4. 【bzoj3684】 大朋友和多叉树 生成函数+多项式快速幂+拉格朗日反演

    这题一看就觉得是生成函数的题... 我们不妨去推下此题的生成函数,设生成函数为$F(x)$,则$[x^s]F(x)$即为答案. 根据题意,我们得到 $F(x)=x+\sum_{i∈D} F^i(x)$ ...

  5. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  6. BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演

    原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...

  7. BZOJ3328 PYXFIB 单位根反演

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

  8. 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)

    数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...

  9. loj#6485. LJJ 学二项式定理(单位根反演)

    题面 传送门 题解 首先你要知道一个叫做单位根反演的东西 \[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\] 直接用等比数列求和就可以证明了 而且在模\ ...

随机推荐

  1. 微耕N3000注入

    使用ILSpy或Reflector 反编译N3000并导出解决方案,便于搜索方法代码 使用ILDASM生成中间代码D:\app\WG\AccessControl\IL\N3000.il 操作如下:(可 ...

  2. zabbix3.4 监控mysql 数据库连接数

    zabbix3.4 监控mysql 数据库连接数具体监控配置待定,近期即将发布!

  3. JVM远程调试功能

    有时候想调试线上的程序 可以启用远程调试功能 在本地调试远程代码. 远程JVM启用调试模式 /usr/local/jdk/bin/java -server -Xms256m -Xmx256m -XX: ...

  4. [20190409]pre_page_sga=true与连接缓慢的问题.txt

    [20190409]pre_page_sga=true与连接缓慢的问题.txt --//曾经遇到11g下设置pre_page_sga=true启动缓慢的问题(没有使用hugepages).--//链接 ...

  5. SQL查询获得指定格式内容

    Oracle中通过修改SQL语句,达到将查询的内容拼接为指定的字符串格式 eg: select '<ta:datagridItem id="' || lower(column_name ...

  6. c/c++ 重载运算符 ==和!=的重载

    重载运算符 ==和!=的重载 问题:假如有一个类似于vector的类,这个类只能存放string,当有2个这个类的对象时,如何比较这2个对象. 自己重载==和!= 代码(重载==,!=) #inclu ...

  7. 浅谈百度地图API的坑

    我们可以使用百度地图生成器生成地图码(功能开发 还是使用官方文档吧) 注意百度地图坑 1.地图和我们申请的ak码版本问题 (解决方案:推荐大家使用2.0) 远程链接:<script type=& ...

  8. 5.5Python数据处理篇之Sympy系列(五)---解方程

    目录 目录 前言 (一)求解多元一次方程-solve() 1.说明: 2.源代码: 3.输出: (二)解线性方程组-linsolve() 1.说明: 2.源代码: 3.输出: (三)解非线性方程组-n ...

  9. 英语口语练习系列-C08-考试

    <蒹葭>-诗经 蒹葭苍苍,白露为霜.所谓伊人,在水一方.溯洄从之,道阻且长.溯游从之,宛在水中央. 蒹葭萋萋,白露未晞.所谓伊人,在水之湄.溯洄从之,道阻且跻.溯游从之,宛在水中坻. 蒹葭 ...

  10. 【题解】洛谷P3660 [USACO17FEB]Why Did the Cow Cross the Road III

    题目地址 又是一道奶牛题 从左到右扫描,树状数组维护[左端点出现而右端点未出现]的数字的个数.记录每个数字第一次出现的位置. 若是第二次出现,那么删除第一次的影响. #include <cstd ...