摘要: $\phi(n)$即小于n且与n互素的整数个数。 由容斥定理可得公式: \(\phi(n)=\sum_{S\subseteq ( p_{1},p_{2},...,p_{k} ) }(-1)^{\left | S \right |}\frac{n}{\prod_{p_{i}\in S}p_{i}}\) 阅读全文
posted @ 2020-09-29 18:07 Sakyo 阅读(109) 评论(0) 推荐(0)
摘要: 格雷码是任意两个相邻数的代码只有一位二进制数不同的编码。 例如以下为三位元的格雷码:000 001 011 010 110 111 101 100。 正反向公式: \(G(n) = n \oplus (n >> 1)\) \(n = G(n) \oplus (G(n) >> 1) \oplus .. 阅读全文
posted @ 2020-09-27 22:11 Sakyo 阅读(1016) 评论(0) 推荐(0)
摘要: Trie(前缀树)用来保存字符串集合。 这个树的根结点ID为0,其余结点ID为从1开始的正整数。 $ch[i][j]$表示结点$i$的边为$j$的子结点的编号(不存在则为0),例如:\(ch[0][A]=5,ch[1][A]=0\)。 S表示字符集的大小,当字符集为全体小写字母时$S=26$。 插入 阅读全文
posted @ 2020-09-26 22:39 Sakyo 阅读(86) 评论(0) 推荐(0)
摘要: KMP(Knuth-Morris-Pratt)算法是一种线性时间字符串匹配算法。 假设文本$T$为一个长度为$n$的字符串,模式$P$为一个长度为$m$的字符串,满足$m \leqslant n$。需要在文本中找出所有的匹配点$s$使得对任意$0 \leqslant j < m$,$T[s+j]=P 阅读全文
posted @ 2020-09-24 21:37 Sakyo 阅读(194) 评论(0) 推荐(0)
摘要: 二分查找用于搜索目标值在排序数组中的位置,时间复杂度$O(logn)$。 int l = 1, r = n; while(l <= r) { int m = l + ((r - l) >> 1); if(check(m)) l = m + 1; else r = m - 1; } // l or r 阅读全文
posted @ 2020-09-22 21:22 Sakyo 阅读(68) 评论(0) 推荐(0)
摘要: 求1和n之间的所有素数 1. 朴素方法 int m = sqrt(n + 0.5); memset(vis, 0, sizeof(vis)); for(int i = 2; i <= m; i++) if(!vis[i]) for(int j = i * i; j <= n; j += i) vis 阅读全文
posted @ 2020-09-21 20:05 Sakyo 阅读(77) 评论(0) 推荐(0)