# 因素和
求一个自然数 n 的所有因数之和
# 暴力筛
复杂度 O (nlogn)
即准备一个长度为 n 的数组 f [n],表示 n 的因数和,令 i 遍历 1~n ,若 i 是 j 的因数,则 f [j]+=i。
+++ 代码实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 ll f[N],s; int n;void init (int n) { for (int i=1 ;i<=n;i++) { for (int j=i;j<=n;j+=i) { f[j] += i; } } }
+++
# 线性筛
参考资料戳此处
复杂度 O (n)
(需要了解欧拉筛)
由算术基本定理,任意自然数 n 可表示为
n = p 1 k 1 p 2 k 2 … p n k n p_1^{k_1}p_2^{k_2}…p_n^{k_n} p 1 k 1 p 2 k 2 … p n k n
则其因数和为
(1+p 1 p_1 p 1 +p 1 2 p_1^2 p 1 2 +…+p 1 k 1 p_1^{k_1} p 1 k 1 )(1+p 2 p_2 p 2 +p 2 2 p_2^2 p 2 2 +…+p 2 k 2 p_2^{k_2} p 2 k 2 )…(1+p n p_n p n +p n 2 p_n^2 p n 2 +…+p n k n p_n^{k_n} p n k n )
又可以写为
∑ i = 0 n ∑ j = 0 k i p i j \sum_{i=0}^n\sum_{j=0}^{k_i}p_i^j ∑ i = 0 n ∑ j = 0 k i p i j
# 求三角形面积
# 海伦公式
S = p ( p − a ) ( p − b ) ( p − c ) S = \sqrt{p(p-a)(p-b)(p-c)}
S = p ( p − a ) ( p − b ) ( p − c )
其中
p = a + b + c 2 p = \frac{a+b+c}{2}
p = 2 a + b + c
# 秦九韶公式
S = 1 4 [ a 2 b 2 − ( a 2 + b 2 − c 2 2 ) 2 ] S = \sqrt{\frac{1}{4}[a^2b^2-(\frac{a^2+b^2-c^2}{2})^2]}
S = 4 1 [ a 2 b 2 − ( 2 a 2 + b 2 − c 2 ) 2 ]