bzoj給定codevs
洛谷
y y
, z' role="presentation">zz,
p p
,求 (1)yz(
modp
)' role="presentation">yz(
modp)y
z(modp
)(2)x∗
y≡z(
modp
) x∗y
≡z
(modp)
中x x
的最小非負整數解
(3)yx≡
z(modp
)' role="presentation">yx≡
z(modp)y
x≡z(
modp)中
x x
的最小非負整數解
(1)
快速冪求解
(2)
可以用擴充套件歐幾里得定理求解,但蒟蒻懶,就想用費馬小定理(ap
−1≡1
(modp)
' role="presentation">ap−
1≡1(
modp)a
p−1≡
1(modp),
p p
為質數)求逆元
ap因為−1≡1
(modp)
' role="presentation">ap−
1≡1(
modp)a
p−1≡
1(modp),
p p
為質數
可得 a∗a
p−2≡
1(modp
)' role="presentation">a∗a
p−2≡
1(modp)a
∗ap−
2≡1(
modp),
p p
為質數
所以 a
' role="presentation">a
a的逆元a−
1=ap
−2a −1
=ap−
2但本小題中同餘號右邊不是
1 1
,不能直接使用費馬小定理求逆元,所以想法把右邊化為
1' role="presentation">11:
x∗y≡
z(modp
) x∗y
≡z
(modp)
⇔ ⇔
x∗y∗z−
1≡z∗
z−1(
modp
) x∗y
∗z−1
≡z∗z
−1
(modp)
⇔ ⇔
x∗y∗z−
1≡1(
modp
) x∗y
∗z−1
≡1
(modp)
x x
與y∗z−
1' role="presentation">y∗z
−1y∗
z−1互為逆元 所以x
=(y∗
z−1)
−1x =(
y∗z−
1)−1
其中a a
的逆元a−
1=ap
−2' role="presentation">a−1
=ap−
2a−1
=ap−
2所以x=
(y∗z
p−2)
p−2 x=(
y∗zp
−2)p
−2
(3)
bsgs,具體就像分塊,可以在o(
p‾√)
o (p
)內求解yx
≡z(modp)
y x≡
z(
modp
)因為y
0≡1(
modp
) y0≡
1(
modp
)且yp
−1≡1
(modp)
y p−
1≡1(
modp
),所以只用考慮x∈
[1,p
−1] x∈[
1,p−
1]
即可用分塊思想,設m=
p‾√ m=p
然後可以預處理出yi
,i∈[
0,m]
y i,
i∈[0
,m
]接著從z
z
依次除以ym
' role="presentation">ymy
m,為了方便mod運算,乘以逆元(y
m)−1
=yp−
m−1 (ym
)−1=
yp−m
−1
(同樣由費馬小定理得出)
一旦遇到yi
,i∈[
0,p‾
√]y i,
i∈[0
,p
],則答案ans=下降(除以ym
y
m)的次數×
m m
+i' role="presentation">ii
擴充套件bsgs的筆記還沒寫,以後也許會補上筆記
三道小題之間還是分得很清楚的
#include
using
namespace
std;
typedef
long
long ll;
#define rg register
template
inline
void read(_tp&x)
inline ll qpow(ll a,ll b,ll mod)
return ans;
}int main()
return
0; }
if(opt==2)
return
0; }
if(opt==3)
if(b==1&&!a)
if(a%p==0&&b)
a%=p,b%=p;
mp.clear();
ll m,v,base=1;
m=ceil(sqrt(p+0.5));
v=qpow(a,p-m-1,p);
mp[1]=m;
for(rg int i=1;iif(!mp[base=base*a%p])mp[base]=i;
for(rg int i=0;iif(mp[b])
b=b*v%p;
}puts("orz, i cannot find x!");
con: ;
}return
0; }
puts("fck");
return
0;}
SDOI2011 染色 題解
題目大意 給定一棵有n個節點的無根樹和m個操作,操作有2類 1 將節點a到節點b路徑上所有點都染成顏色c 2 詢問節點a到節點b路徑上的顏色段數量 連續相同顏色被認為是同一段 思路 樹剖之後,維護其兩端的顏色 答案和標記即可。include include define n 100001 using...
SDOI2011 飛彈攔截 題解
論printf lf 0.0 的重要性 給你nn 個三維的點 x,y,z x,y z 求出最長的三維不下降序列,並輸出每乙個點在最長的序列上的概率。這個肯定和普通的飛彈攔截不同了,普通的是沒有速度的,也就是二維的,且時間一維已經有序,那麼對高度求乙個lis lis 最長不下降序列 就好了。但是現在還...
SDOI 2011 黑白棋 題解
題目傳送門 題目大意 有乙個 1 n 1 times n 1 n 的棋盤,上面有 k kk 顆棋子,一半白一半黑,並且相鄰棋子顏色不同,兩個人輪流操作,乙個人只能將白棋子右移,乙個人只能將黑棋子左移,每個人一次最多移動 d dd 顆棋子,問有多少種局面先手必勝 先手操作白棋子 將相鄰的一對黑白棋子看...