gcd(a,b)!=gcd(a%p,b%p)
貝祖定理
(a,b)代表最大公因數,則設a,b是不全為零的整數,則存在整數x,y,使得ax+by=(a,b)
應用
1.若a|bc,且(a,b)=1,則a|c
2.若a|c,b|c,且(a,b)=1,則ab|c
3.設m為正整數,則(ma,mb)=m(a,b),[ma,mb]=m[a,b] [最小公倍數]
4.設a,b都為正整數,則(a,b)·[a,b]=ab
7.26
(a-b)%p=(a%p-b%p+p)%p
ab mod p=1 a,b互為逆元
a,p互質才有逆元
沒有逆元的情況下
x pair < int ,int > x=a*p^b 記錄a,b
(7/6)%9
7=7*3^0 a=7,b=0
6=2*3^1 a=2,b=1
7/6=(7/2)*3^-1 (其中2對於9有逆元)
費馬小定理求逆元:
a,p 互質
a^phi(p) mod p =1
貝祖定理
線性求逆元
p%a=p-(p div a)*a
移項:(p div a)*a=p-p%a
因為是在%p意義下的逆元,所以p可以直接忽略:
(p div a)*a=-p%a
除過去:
a=-(p%a)/(p div a)
a^-1=-(p div a)/(p%a)
篩素數
for (int i=2;i<=1000000;i++) }
複數 複數x被定義為二元有序實數對(a,b) ,
記為z=a+bi,這裡a和b是實數,i是虛數單位
在複數a+bi中,a=re(z)稱為實部,b=im(z)稱為虛部
當虛部等於零時,這個複數可以視為實數;
當z的虛部不等於零時,實部等於零時,常稱z為純虛數
複數域是實數域的代數閉包,也即任何復係數多項式在複數域中總有根
一些常見的數論函式
e(x)=[x=1] //[x=1]是判定式,當x==1時函式式=1,否則=0
n(x)=x
d(x)=x所有因數的個數
計算方式:x=2^p1*3^p2*5^p3…
d(x)=(p1+1)(p2+1)(p3+1)…
phi*1=n
mu*1=e
bsgs
x^y mod p =z mod p
求y的取值
y=km+i
7.27
inline 只適用於語句少,遞迴層數少的函式
一般寫node merge(node a,node b) //
序列上的題慢慢變到了樹上,估計以後就要變到仙人掌上去了
樹狀陣列 區間修改區間查詢
迴圈展開
for (int i=1;i<=n;i+=4)
期望:sigma xi*p(xi)
7.28
gcd(fi,fj)=f(gcd(i,j))
f[i]=a1*f[i-1]+a2*f[i-2]+..+ak*f[i-k]
矩陣乘法優化
有限狀態自動機 五元組
平衡樹
fhy treap
替罪羊樹
在splay之前把該節點到根這條路徑上所有標記下傳
void down(int x)
線段樹套平衡樹
空間 nlogn
只有合併,沒有拆分 啟發式合併(小->大)
若是插入或刪除一段元素,可以將splay的乙個點拆成兩個點
人工棧,防止被卡,然而**複雜度很高
7 min dinic
7.29
貪心:擬陣
擬陣定義
乙個擬陣是滿足下列條件的乙個序對 m=(s,l):
(1)s是乙個有窮集合(s is a finite set);
(2)l是s的乙個非空子集簇,即l是由s的子集作為元素構成的集合,且非空;
(3)如果b∈l,並且a包含於b,則有a屬於l。如果l滿足此性質,則稱之為遺傳性;
(4)如果a∈l,b∈l並且|b|>|a|,則有一定存在乙個x∈b-a,使得集合a並上之後形成的集合仍屬於l,該性質稱為交換性。
相關定理
1、如果g=(v,e)是乙個無向圖,那麼m=(s,l)是個擬陣。其中s是圖g的邊集e,而l則是由這樣的e的子集構成的:a是e的子集,並且a是無迴路的,則a屬於l。
2、某一擬陣中的所有最大的獨立子集的大小都是相同的。擬陣m=(s,l)中l的每乙個元素都是s的獨立子集。
擬陣**
「擬陣」這個詞是由hassler whitney最早開始使用的。
他曾研究矩陣擬陣,其中s是給定矩陣的各個行,
如果這些行在通常意義下是線性無關的,則他們是獨立的。
擬陣應用
擬陣可以用來研究貪心演算法,他是貪心演算法的數學基礎,
可以這麼說,乙個問題如果他可以轉換為擬陣,那麼一定可以用貪心演算法進行求解;
但是並不是所有的可用貪心演算法求解的問題都能轉換為擬陣。
主要是用來求解最優問題
c++運算符號優先順序,每次比賽前必看
最大權閉合子圖
建圖:如果收益為+,源點向該點連邊 割這條邊表示放棄這部分收益
收益為-,該點向匯點連邊 割這條邊表示付出這部分花費
最後答案為,sigma(收益)-最大流(花費)
2755
黑白染色
白到黑
如果n*m為偶數,那假如x可行,x+1一定可行
二分 源點向白連x-vi的流量
n*m為奇數
白 wn ws x*wn-ws
黑 bn bs x*bn-bs
聯立解方程
棋盤:黑白染色
黑紅藍染色
7.30
字串hash
bkdr hash
把每乙個字元看成是乙個數字
abc=1*26^2+2*26+3
進製的選擇:27 233 19260817
unsigned long long 直接%2^64 進製不要選擇偶數
f[i+1]=f[i]*d+x //計算hash值
[l,r] f[r]-d^(r-l+1)f[l-1]
d 預處理
企鵝qq
排序之後,統計相同hash的有多少個,n*(n-1)/2
trie 樹 開不下的話 開鄰接表
7.31
矩陣 for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
a[i][j]=w%mod;
}
f[i+1][0] f[i+1][1] f[i+1][2] f[i+1][3]
f[i][0] a b c d
f[i][1] d a b c
f[i][2] c d a b
f[i][3] b c d a
a:%p==0
b:%p==1
c:%p==2
d:%p==3
迴圈矩陣
相乘還是迴圈矩陣
因此只計算第一行
3 1
1 3
1 2 (1*3+2*1) (1*1+2*3)
2 1 (2*3+1*1) (2*1+3*1)
8.1
計算幾何
直線表示:點+向量
a(x0,y0) ab(x,y)
直線ab上的點c(x0+tx,y0+ty)
直線與直線的交點:
a(x1,y1) b(x2,y2)
c(x3,y3) d(x4,y4)
直線ab與cd的交點 e(x,y)
x=x1+tx2=x3+mx4;
y=y1+ty2=y3+my4;
點到直線的距離
c->ab
2s(abc)/ab
多邊形面積計算:一定要按一定的順序(順時針或逆時針),一定要帶符號,最後再求fabs
三角形重心
((x1+x2+x3)/3,(y1+y2+y3)/3)
多邊形重心
把多邊形劃分成多個三角形,
若多邊形面積是s,某一三角形面積是s1
則該三角形的重心佔多邊形重心的比例(x1*s1/s,y1*s1/s)
所以多邊形的重心就是把若干個三角形的重心按如上形式加起來即可
凸包:
1.極角排序(時間複雜度低)
2.兩邊構造上凸殼和下凸殼(點按照x和y排序)
瑣碎知識點
13 反射獲取方法所在的類名稱 system.reflection.methodbase.getcurrentmethod declaringtype 12 try catch finally try catch exception ex finally view code sqliteconnec...
python numpy瑣碎知識點
最近在寫python 和c 的呼叫,在python numpy 矩陣傳入c 的時候出現了一些問題,在此記錄一下 numpy矩陣的資料在記憶體中不一定是連續的,可以用flags這個屬性進行檢視 numpy矩陣的記憶體連續分為 c order 連續和 f order 連續 也就是分別對應這c語言和for...
瑣碎知識點 1
createelement 鏈結中有 號 說明 不用註冊,直接使用。關於英語,英語算是乙個基本的技能,你不會就要去學習,很多技術第一手資料都是英文的,如果你等到別人翻譯好,那獲取就滯後了,那就被動了。因此,我特別鼓勵大家去學習英語,用蹩腳的英語去跟老外交流,不要害羞,他們也是可以理解的,同時我自己也...