個人筆記,僅供複習1.1 定義:逆元素是指乙個可以取消另一給定元素運算的元素,在數學裡,逆元素廣義化了加法中的加法逆元和乘法中的倒數。
1.2 數論中定義:如果滿足公式,a*b = 1(mod p),則a是b的逆元,同時b也是a的逆元。
1.3 另一種定義:a*x = 1 (mod p),其中a與p互質,則稱x的最小整數為a關於p的逆元。
2.1 除法模運算:設c為b在對p取模狀態下的逆元,在求(a/b)%p時,很可能會因為b過大而超過精度範圍,這時候可以將除法轉換成乘法來做,(a/b)%p = (a*b)%p = (a%p)*(b%p)%p。
費馬小定理:若p為素數,則有推論:3.1.1**例項:故就是a關於p的乙個逆元
#include#includeusing namespace std;
const int maxn = 100010;
const int mod = 1e5+7;
typedef long long ll;
ll finv[maxn];
ll qpow(ll x,ll p,ll m)
return res;
}void init()
int main()
3.1.2 複雜度分析:求單個逆元的時間複雜度是lg(mod)
求a關於1模p的逆元,可以轉化為a*x = 1+k*p,其中x與p都是整數,這樣x即為所求逆元。這樣就可以轉化為拓展歐幾里得演算法(要求a與p互質):a*x + k*p = 1;
遞推式:inv[i] = (mod-mod / i) * inv[mod% i]%mod推倒:假設t = mod / i(向下取整),k = mod % i,那麼t * i + k = mod;3.3.1 **例項:因為;等式兩邊同時除 i * k,得:
;移項,得:
;即inv[i] = (-mod/i)*inv[mod% i]%mod
如果要保證結果為正:inv[i] = (mod-mod / i) * inv[mod% i]%mod
#include#includeusing namespace std;
typedef long long ll;
const int maxn = 100010;
const int mod = 1e5+7;
ll inv[maxn];
void inv()
}int main()
3.3.2 演算法複雜度分析:線性時間遞推,時間複雜度o(lg n)
3.3.3 求 n! 逆元:
inv[i] = inv[i+1] * (i + 1) % mod
#include#includeusing namespace std;
const int maxn = 100010;
const int mod = 1e9+7;
typedef long long ll;
ll finv[maxn],f[maxn];//f存階乘,finv存對應逆元
ll qpow(ll x,ll p,ll m)
return res;
}void init()
int main()
httpsession 詳細內容整理
最近在做登入和許可權控制模組,用到了session,發現session的好多方法都不熟悉,而且以前也聽說過jsessionid 之類session竊取的事,對這些一直都是一知半解。今天索性google了很多資料,先上sun的官網去看session的文件了解一些方法,又找了 別人關於session的看...
httpsession 詳細內容整理
最近在做登入和許可權控制模組,用到了session,發現session的好多方法都不熟悉,而且以前也聽說過jsessionid 之類session竊取的事,對這些一直都是一知半解。今天索性google了很多資料,先上sun的官網去看session的文件了解一些方法,又找了別人關於session的看法...
C String類詳細整理
string簡介 string語法基礎 輸出測試 1 string的比較操作 string類的常用建構函式 string類的常用函式 1 引入標頭檔案 string要使用先引入標頭檔案 include 注意這裡的是string,學了c的同學請注意,不是string.h 底層 是一種順序表的結構,元素...