数学&数论 知识总结
2017-08-17 16:04
281 查看
数学&数论知识总结
gcd:
没啥可说的。int Gcd(int a, int b){ return b==0 ? a : Gcd(b, a&b);} int Lcm(int a, int b){ return a * b / Gcd(a, b); } int Ex_gcd(int a, int b, int &x, int &y){ if(b == 0) x = 1, y = 0, return a; int sum = Ex_gcd(b, a%b, x, y); int tt = x; x = y, y = tt - a / b * y; return sum; }//充要条件__gcd(a,b)|c . bool Linear_E(int a, int b, int c, int &x, int &y){ int tt = Ex_gcd(a, b, x, y); if(c % tt) return 0; int kk = c / tt; x *= kk, y *= kk; return 1; }//求解 ax + by = c. bool Linear_M(int a, int b, int p){ int x, y; int tt = Ex_gcd(a, p, x, y); if(b % tt) return 0; int x0 = x * (b/tt) % p; for(int i = 1; i < tt; i++) printf("%d\n", (x0 + i*p/tt) % p); return 1; }//求解 ax ≡b (mod p).
逆元的各种求法:
(a/b) % p == (a*b 的逆元) % p__1: ans = a^(p-2) % p (ax ≡1) //费马小定理 __2: ans = a/b % p = a % (m*b) / b //(b|a) //求逆元通用公式(不用考虑 exgcd 和 费马小定理 的互质限制) __3: i^-1 = - [p/i] / [p%i] //递推
欧拉函数:
小于等于n 且与n互质的数的数目for(int i = 2; i <= n; i++) fi[i]=i; for(int i = 2; i <= n; i++){ if(fi[i] == i) for(int j = i; j <= n; j += i) fi[j] = fi[j] / i * (i-1); }
int Euler(int n){ int sum = 1; for(int i = 2; i*i <= n; i++){ while(!(n&i)){ n /= i; sum *= i-1; } } if(n > 1) sum *= n-1; return sum; }
中国剩余定理(CRT):
中国剩余定理的五种解法 【懒人如我】x ≡a1 (mod n1); x ≡a2 (mod n2); .... => x ≡a1 - u0n1 (mod lcm(n1, n2)).
快速幂:
依然没啥可说的。int Pow(int a, int b, int p){ int sum = 1, tt = a&p; while(b){ if(b & 1) sum = (sum * tt) %p; tt = (tt * tt) % p; b >>= 1; } return sum; }//a^b%p__快速幂 ( 时间复杂度 log(b) ). int Pow_sum_mod(int a, int n, int p){ if(n == 1) return a % p; if(!(n % 2)) return Pow_sum_mod(a,n/2,p) * (Pow(a,n/2,p)+1) % p; else return ( Pow_sum_mod(a,(n-1)/2,p)*(Pow(a,(n-1)/2,p)+1)+Pow(a,n,p) ) % p; }//等比数列 二分求和 取模.
矩阵快速幂:
ans ^= n -> Mat ans = Mat(); ans.size = Size; //初始化ans矩阵. ans = Quickmulti(ans, n, p);
const int Matr = ____; //矩阵大小. struct Mat{ int aa[Matr][Matr], size; Mat(){ size = 0, memset(aa, 0, sizeof(aa)); } }; //矩阵结构体,aa__矩阵,size__大小(从1开始). Mat Multi(Mat m1, Mat m2, int p){ Mat sum = Mat(); sum.size = m1.size; for(< 4000 span class="hljs-keyword">int i = 1; i <= m1.size; i++) for(int j = 1; j <= m2.size; j++){ if(m1.aa[i][j]){ for(int k = 1; k <= m1.size; k++) sum.a[i][k] = (sum.aa[i][k]+m1.aa[i][j]*m2.aa[j][k]) % p; }//稀疏矩阵优化. } return sum; }//两个相等矩阵的乘法__对于稀疏矩阵,有0的地方(不用运算)的优化. Mat Quickmulti(Mat m,int n,int p){ Mat sum = Mat(); for(int i = 1; i <= m.size; i++) sum.aa[i][i] = 1; sum.size = m.size; while(n){ if(n & 1) sum = Multi(m, sum, p); m = multi(m,m,mod); n >>= 1; } return sum; }//二分快速幂. void print(Mat mm){ printf("%d\n", mm.size); for(int i = 0; i < mm.size; i++){ for(int j = 0; j < mm.size; j++) printf("%d ", mm.aa[i][j]); puts(""); } }//输出矩阵信息,debug用.
筛法:
for(int i = 2; i <= sqrt(n+0.5); i++){ if(!sieve[i]) for(int j = i*i; j <= n; j += i) sieve[j] = 1; }
int Sieve(int n){ vector<int> prime; vector<int> ispri; for(int i = 1; i <= n; i++) ispri[i] = 1; for(int i = 2; i <= n; i++){ if(ispri[i]) prime.push_back(i); for(int j = 0; j < prime.size(); j++){ if(prime[i]*i <= n) ispri[prime[j]*i] = 0; else break; if(!(i%prime[j])) break; } } }//线筛.
高斯消元:
高斯表示不要把他的名字拼错。bool gauss(){ int now = 1, to; double t; for(int i = 1; i <= n; i++){ for(to = now; to <= n; to++) if(fabs(a[to][i]) > eps) break; if(to > n) return 1; if(to != now) for(int j = 1; j <= n+1; j++) swap(a[to][j], a[now][j]); t = a[now][i]; for(int j = 1; j <= n+1; j++) a[now][j] /= t; for(int j = 1; j <= n; j++){ if(j != now){ t = a[j][i]; for(int k = 1; k <= n+1; k++){ a[j][k] -= a[now][k] * t; } } } now++; } for(int i = 1; i <= n; i++) if(fabs(a[i][n+1] > eps)) return 0; return 1; }//高斯消元.
高精:
高精表示她其实很简单。注意高精减/除的各种特判。
高精除高精实际上是一个极其复杂的过程(只是因为懒得写)。
【懒人如我】 【网址都懒得贴】
模运算法则
(a + b) % c = (a % c + b % c) % c适用于 + - *
加法&乘法 结合律&分配律 可用
数学定理
数学定理总结Stirling 数
约瑟夫问题
Catalan数
.
.
.
矩阵乘法
前行 * 后列矩阵快速幂
位运算
注意优先级常用位运算总结
相关文章推荐
- 总结人工智能需要的数学知识
- POJ 1401 Factorial (对数学知识考…
- 数论知识总结
- mysql基础&重点知识总结及在python中的应用(3)
- <读书笔记>Windows内核安全 ---串口过滤驱动(3) 相关知识总结
- 数学规律题,数论知识:hdu1792
- TestDirector&nbsp;8.0&nbsp;&nbsp;知识总结(不断…
- MFC 知识总结<2>MFC CView
- HDD&&SSD基础知识总结
- ACM中的基本数学知识掌握 --- 【数论/组合/博弈论/计算几何】非常重要
- STL"源码"剖析-重点知识总结
- ASP.NET视频知识总结 chapter3 & chapter4
- 黑马程序员_内省&注解&枚举知识总结
- LeetCode数据库题解&&sql相关知识总结
- 数论知识总结-线性筛
- C#高级语法基础知识总结6——字符串&集合
- 数论知识总结-欧拉函数
- 数论&&组合数学_模板
- IEEE 802.3ad 链路聚合与LACP的简单知识&EtherChannel 总结
- BZOJ3505 & 洛谷P3166 [Cqoi2014]数三角形 【数学、数论】