原创 關於數學裏的一些知識

關於數學:                                 --------------------------  1                                                  

原创 階乘的分解質因數

首先說一下分解質因數: 唯一分解定理:任何一個數都可以唯一分解爲幾個質數的冪次乘積。 const int maxn = 1e6+5; int p[maxn], c[maxn]; int cnt = 0; void divided(in

原创 貢獻思想 + 數論 + 思維(例題 Problem J. Prime Game)

首先說一下貢獻的思想: 舉個例子:已知有n個數,從 ,求 中所有質因數出現的個數。 假設當前數爲  6, 7, 5, 5, 4, 9, 9, 1, 8, 12 首先寫出他每個數的質因數: 每個數的質因數分解 6 7 5 5 4 9 9

原创 求連通塊個數(使用並查集)

並查集求連通塊個數的模板 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+5; vector<int>G[maxn]; bool isRoot[

原创 codeforces#597 D. Shichikuji and Power Grid(虛點+最小生成樹+記錄)

題意:給出n個點,表示n座城市,現在想讓每座城市都有電,所以需要再每座城市建發電站或者與相鄰城市連接進行供電,在城市建發電站的花費是,城市i與城市j架接電線的花費是,請問如何設計才能使的花費最小。 思路:剛開始的想法特別混亂,覺

原创 codeforces#597 C. Constanze's Machine(簡單dp)

題意:給定一個字符串,如果在該字符串中存在m或w時,輸出0,否則,求存在u和n的字符串有多少種方案數。 思路: #include<bits/stdc++.h> using namespace std; typedef lon

原创 離散對數(同餘理論-BSGS算法)

用來求解如下同餘方程x的最小正整數解:                           p爲質數,a、b、p已知,且 (如果a、b大於p,則對他們取模) 模板:(p爲素數) /*********************解法*

原创 sym()及其dim()的應用

定義:該函數是用來符號數字、符號變量、符號對象。符號對象的類型是sym,可以通過class(S)來驗證,這裏S是一個符號對象。符號變量的優點是,使用符號變量運算得到的只是一個解析解。 優點:使用符號變量進行運算能夠最大限度的減少運算

原创 最大子段和(動態規劃及分治法)

動態規劃法: 首先給一個任意的序列來說明這個問題 1 2 3 -1 -5 4 5 8 首先設一個dp數組,dp[i]表示前i個區間的最大子段和 如果dp[i-1] > 0,那麼dp[i] = dp[i-1] + a[i] 否則dp[i

原创 求逆元(線性求逆元)及其擴展歐幾里得

線性求逆元模板: int inv[maxn]; void initInverse(){ inv[1] = 1; for(int i = 2; i <= maxn; i++) inv[i] = (p -

原创 歐拉降冪及其擴展歐拉降冪

歐拉降冪: 從公式來看,需要使用快速冪運算和歐拉函數 #include<bits/stdc++.h> using namespace std; typedef __int64 LL; const int maxn = 1e6+

原创 快速乘(模板)

因爲有時候乘法會溢出,即使是long long也可能在乘法時爆掉。而使用快速乘會很高效完成乘法操作並且不會爆long long 快速乘就是將它轉化爲加法,不是一個一個的加,仿照2進制加法操作來完成(快速乘需要它爲正數,不能爲負數)

原创 原根與指標,離散對數

原根:   定義 設m是正整數,a是整數,若a mod m 的階等於,則稱a爲模m的一個原根(表示m的歐拉函數) 當且僅當指數爲P - 1的時候,成立,則質數P的原根即爲g        求解方法:1.將p-1進行質因數分解     

原创 原根與指標(離散對數)

原根:一個數學符號。設m是正整數,a是整數,若a模m的階等於,則稱a爲模m的一個原根。 即 一個數m如果有原根,則其原根個數爲phi(phi(m)),特別的,對素數有phi(p) = p-1 指標(離散對數): 模素數p的原根g的優

原创 逆元(求多個逆元)

求多個逆元,可以使用線性遞推 不妨令p = k * q + r,則有  k*q + r 0(mod ) for(int i = 0; i < n; i++) inv[i] = (p - p / i) * inv[p % i]