摘要:
欧几里得算法 欧几里得算法又称辗转相除法,用来求两个数的最大公约数的算法。 省流:\(gcd(a,b)=gcd(b,a\mod b)\) 学习笔记 点击查看代码 #include <bits/stdc++.h> using namespace std; int a,b; int gcd(int x, 阅读全文
摘要:
学习笔记 学习笔记 逆元 当 \(ax\equiv1\ (mod \ b)\) 称 \(x\) 为 \(a \mod b\) 的逆元,记作 \(a^{-1}\)。 求逆元 以下都是求逆元的方法,为了不那么无聊 给个例题做。 拓展欧几里得法 exgcd链接 虽然 exgcd 是为了求 \(ax+by= 阅读全文
摘要:
小费马定理: 如果 \(p\) 是一个素数,且 \(a\) 是任意整数,则: \[a^p \equiv a \ (\text{mod} \ p) \]当 \(a\) 与 \(p\) 互质时,即 \(\gcd(a, p) = 1\), 则有:$$a^{p-1} \equiv 1 \ (\text{mo 阅读全文
摘要:
其实三分和二分实现是一样的,但是为什么我还要写一下呢,因为我没学的时候感觉太可怕了,学了后发现也就那样,所以我要记录一下(水题解)。 原题链接 每次三分取 \(x\) 判断大小。 #include <bits/stdc++.h> using namespace std; #define ll lon 阅读全文
摘要:
裴蜀定理 \(i|j\) 表示 \(i\) 是 \(j\) 的约数。 \(ax+by=c\),\(x,y\in \mathbb{Z}\),该等式成立的条件为 \(gcd(a,b)|c\)。 省流: \[ax+by=gcd(a,b) \]接下来证明一下: 设 \(s\) 为 \(gcd(a,b)\), 阅读全文
摘要:
欧拉函数 定理 欧拉函数,即 \(\varphi(n)\),表示的是小于等于 \(n\) 和 \(n\) 互质的数的个数,详细定义看wiki。 欧拉函数其实就是容斥原理的应用,举个例子: 如 \(n=6\),\(1,2,3,4,5,6\) 是整个序列,我们将 \(6\) 的质因子 \(2\),\(3 阅读全文
摘要:
一个正向取前缀和,一个反向取,最后枚举断点。 #include <bits/stdc++.h> using namespace std; #define ll long long int n,sum; int a[200005]; int front[200005]; int back[200005 阅读全文
摘要:
又是一个思维毒瘤好题,但dp题都是这样,菜就多练吧。 拆环为链,前缀和加速计算,枚举断点数、起点、终点、断点。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N=105; int a[N*2] 阅读全文
摘要:
原题链接 虽然我还是看题解才会做的(菜),但我还要说这题挺简单的(菜),还是菜就多练。 因为是对一个字符串操作求树的可能数,所以考虑区间dp,设状态 \(dp[i][j]\) 为区间 \(i\) 到 \(j\) 树的状态数。 在转移的过程中如果 \(s_i=s_j\) 时代表这可能为同一个根节点组成 阅读全文