POJChallengeRound2 Guideposts 【单位根反演】【快速幂】
题目分析:
这题的目标是求$$ \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 【单位根反演】【快速幂】的更多相关文章
- 【BZOJ3328】PYXFIB(单位根反演,矩阵快速幂)
[BZOJ3328]PYXFIB(单位根反演,矩阵快速幂) 题面 BZOJ 题解 首先要求的式子是:\(\displaystyle \sum_{i=0}^n [k|i]{n\choose i}f_i\ ...
- bzoj3328: PYXFIB(单位根反演+矩阵快速幂)
题面 传送门 题解 我们设\(A=\begin{bmatrix}1 & 1 \\ 1 & 0\end{bmatrix}\),那么\(A^n\)的左上角就是\(F\)的第\(n\)项 所 ...
- 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...
- 【bzoj3684】 大朋友和多叉树 生成函数+多项式快速幂+拉格朗日反演
这题一看就觉得是生成函数的题... 我们不妨去推下此题的生成函数,设生成函数为$F(x)$,则$[x^s]F(x)$即为答案. 根据题意,我们得到 $F(x)=x+\sum_{i∈D} F^i(x)$ ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演
原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...
- BZOJ3328 PYXFIB 单位根反演
题意:求 \[ \sum_{i=0}^n[k|i]\binom{n}{i}Fib(i) \] 斐波那契数列有简单的矩阵上的通项公式\(Fib(n)=A^n_{1,1}\).代入得 \[ =\sum_{ ...
- 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)
数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...
- loj#6485. LJJ 学二项式定理(单位根反演)
题面 传送门 题解 首先你要知道一个叫做单位根反演的东西 \[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\] 直接用等比数列求和就可以证明了 而且在模\ ...
随机推荐
- AI时代大点兵-国内外知名AI公司2018年最新盘点
AI时代大点兵-国内外知名AI公司2018年最新盘点 导言 据腾讯研究院统计,截至2017年6月,全球人工智能初创企业共计2617家.美国占据1078家居首,中国以592家企业排名第二,其后分别是英国 ...
- 43.Odoo产品分析 (四) – 工具板块(11) – 网站即时聊天(1)
查看Odoo产品分析系列--目录 在线聊天可以实现与顾客的在线实时交流,比如在"商店"功能中实现顾客对客服的商品咨询等类似的操作. 安装"网站即时聊天"模块: ...
- 章节十、1-用ID和XPath、name定位元素
一.在定位元素时需要HTML标签,HTML是超文本标记语言,我们打开web网页是看到的内容就是通过html语言来实现的,按键盘“F12”调用开发者选项后,“Elements”栏中显示的就是网页的HTM ...
- 测者的性能测试手册:Yourkit 监控JettyYourkit 监控Jetty
Yourkit是收费工具,每一个email可以免费试用15天,觉得好的朋友可以自行选择购买 服务器端下载yourkit(java) Windows安装yourkit Java Profiler 201 ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- c/c++ 网络编程 UDP up/down 网卡
网络编程 UDP up/down 网卡 在程序里动态改变网卡的状态.注意:程序运行需要root权限. 程序运行的方法: sudo ./a.out 1,关闭网卡 #include <stdio.h ...
- C 存储类
存储类定义 C 程序中变量/函数的范围(可见性)和生命周期.这些说明符放置在它们所修饰的类型之前.下面列出 C 程序中可用的存储类: auto.register.static.extern auto ...
- Lua中string.format占位符的使用
虽然lua中字符串拼接"string.format"相对于".."消耗较大,但有时为了代码的可读性,项目中还是经常用到"string.format&q ...
- git add 添加多个文件
在使用git add提交多个文件的方式: git add . 后面加一个".",匹配所有的文件 总结下,提交多个文件时,git add后可以有如下参数以及参数的解释: git ...
- 聚类——GMM
聚类——认识GMM算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.GMM概述 二.GMM算法步骤 三.具体推导参考文献 1. 李航. 统计学习 ...