【模板】数学

数论

打表

\(\omega\) 为不同质因子个数,\(d\) 为约数个数

\(n\le\) \(10^1\) \(10^2\) \(10^3\) \(10^4\) \(10^5\) \(10^6\) \(10^7\) \(10^8\) \(10^9\)
\(\max\{\omega(n)\}\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(8\) \(9\)
\(\max\{d(n)\}\) \(4\) \(12\) \(32\) \(64\) \(128\) \(240\) \(448\) \(768\) \(1344\)
\(n\le\) \(10^{10}\) \(10^{11}\) \(10^{12}\) \(10^{13}\) \(10^{14}\) \(10^{15}\) \(10^{16}\) \(10^{17}\) \(10^{18}\)
\(\max\{\omega(n)\}\) \(10\) \(10\) \(11\) \(12\) \(12\) \(13\) \(13\) \(14\) \(15\)
\(\max\{d(n)\}\) \(2304\) \(4032\) \(6720\) \(10752\) \(17280\) \(26880\) \(41472\) \(64512\) \(103680\)

组合数学

线性代数

凸包

\(\max_{i}\{kx_{i}+y_{i}\}\)\(x_{i},y_{i},k\)int

\((x_{i},y_{i})\) 建上凸包,查询斜率为 \(-k\) 的直线的最大截距

  • 静态建
struct Vec {
	LL x,y; Vec(LL x=0,LL y=0):x(x),y(y){}
	bool operator < (const Vec &rhs) { return x!=rhs.x ? x<rhs.x : y<rhs.y; }
	Vec operator - (const Vec &rhs) { return {x-rhs.x, y-rhs.y}; }
	LL operator & (const Vec &rhs) { return x*rhs.y-y*rhs.x; } // 叉乘
};

Vec s[N]; int t = 0;
sort(all(p));
for(auto i : p) {
	while( t > 1 && (s[t]-s[t-1]&i-s[t-1]) >= 0 ) --t;
	s[++t] = i;
}
  • 双指针查询
sort(all(q),[](int x,int y){return k[x]<k[y];});
int j = 1;
for(int i : q) {
	auto f=[&](int j) { return k[j]*s[i].x+s[i].y; };
	while( j < t && f(j+1) > f(j) ) ++j;
	ans[i] = f(j);
}
  • 二分查询

拉格朗日插值

\(n+1\) 个点值确定一个 \(n\) 次多项式

\[f(x)=\sum_{i=1}^{n+1}y_{i}\prod_{j\ne i}\frac{x-x_{j}}{x_{i}-x_{j}} \]

posted @ 2024-04-12 19:44  ft61  阅读(11)  评论(0编辑  收藏  举报