数论
acm数论
skyyemperor
hello!!远方的朋友,很幸运,遇见你。
个人博客网站 https://blog.skyemperor.top 欢迎来访。。
展开
-
广度优先搜索(BFS)
直接上题目Leetcode题目:腐烂的橘子在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,...原创 2020-03-08 10:36:41 · 251 阅读 · 0 评论 -
数论定理
1. 若num = (n-1)!+1,则[num+1,num+n]为连续的合数。证明:num+1(n+1)!+1+1至少有因子2num+2(n+1)!+3至少有因子3·········num+n(n+1)!+n+1至少有因子n+1所以,均为合数。...原创 2020-03-08 10:36:08 · 260 阅读 · 0 评论 -
滑动窗口
什么是滑动窗口滑动窗口可以看成数组中框起来的一个部分。在一些数组类题目中,我们可以用滑动窗口来观察可能的候选结果。当滑动窗口从数组的左边滑到了右边,我们就可以从所有的候选结果中找到最优的结果。对于这道题来说,数组就是正整数序列 [1, 2, 3, ····, n][1,2,3,…,n]。我们设滑动窗口的左边界为 i,右边界为 j,则滑动窗口框起来的是一个左闭右开区间 [i,j)。注意,为了编程...转载 2020-03-08 10:35:11 · 335 阅读 · 0 评论 -
位运算
概况知识点运算符作用l合取&析取^异或实例一num & 1求num的最后一位num1 ^ num2若两数相同,结果为0题目1给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。int singleNumber(vector<int> &nums) { ...原创 2020-03-08 10:33:45 · 170 阅读 · 0 评论 -
算法小技巧
判断一个数的回文偶数位数回文数(除了11)必定不是质数偶数肯定不是质数。这样至少排除一半多的数据量。bool pdn(int x) { int y = x, num = 0;//int y=x,防止x被改变 while (y != 0) { num = num * 10 + y % 10;//上一次数字的记录进位再加上下一位数 y /= 1...原创 2020-03-08 10:33:10 · 251 阅读 · 0 评论 -
教你彻底学会动态规划——入门篇
动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就通过一个...转载 2020-03-08 10:32:33 · 213 阅读 · 0 评论 -
滚动数组(空间优化)
费纳波契数列dp[]数组实现const int maxn = 1e5 + 6;ll dp[maxn];int main() { int n; sc(n); dp[0] = dp[1] = 1; for (int i = 2; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } ...原创 2020-03-08 10:29:58 · 927 阅读 · 0 评论 -
背包问题dp
一、 单背包问题解法归纳:一、如果装不下当前物品,那么前n个物品的最佳组合和前n-1个物品的最佳组合是一样的。二、如果装得下当前物品。假设1:装当前物品,在给当前物品预留了相应空间的情况下,前n-1个物品的最佳组合加上当前物品的价值就是总价值。假设2:不装当前物品,那么前n个物品的最佳组合和前n-1个物品的最佳组合是一样的。选取假设1和假设2中较大的价值,为当...原创 2020-03-08 10:29:24 · 203 阅读 · 0 评论 -
动态规划入门&字符串相关
前言什么是动态规划?动态规划是求解决策过程最优化的数学方法。把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。什么时候要用动态规划?如果要求一个问题的最优解(通常是最大值或者最小值),而且该问题能够分解成若干个子问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划。动态规划的前提最优化原理(最优子结构性质)最优化原理可这样阐述:一个最优...原创 2020-03-08 10:28:46 · 227 阅读 · 0 评论 -
gcd最大公约数 && lcm最小公倍数
最大公约数ll gcd(ll x, ll y) { while (y) { ll tmp = y; y = x % y; x = tmp; } return x;}最小公倍数ll lcm(ll x, ll y) { return x * y / gcd(x, y);}分数化简-...原创 2020-03-08 10:28:07 · 273 阅读 · 0 评论 -
%(mod p)的用法
(a * b) % p = (a % p) * (b % p) % p(a + b) % p = (a % p + b % p) % p(a - b) % p = (a % p - b % p + p) % p(a / b) % p = (a % p * poww(b,p-2,p)) % p为了防止出现负数,x = ((x % p) + p) % p...原创 2020-03-08 10:27:17 · 976 阅读 · 0 评论 -
欧拉函数
定义:欧拉函数 f(n)为小于n且与n互质的正整数的个数定理:假若n是质数,则f(n)=n-1证明:所有小于n的质数都与n互质,所以f(n)=n-1假若m,n为两个正整数且(m,n)=1,那么就有f(mn)=f(m)f(n)----积性函数φ(n)=n(1-1/p1)(1-1/p2)…*(1-1/px)*其中:p1,p2…px 为n的质因数;求一个数的欧拉函数o(n1...原创 2020-03-08 10:24:35 · 270 阅读 · 0 评论 -
快速幂 & 慢速乘
快速幂快速求幂,防止爆炸----- 将n转化为二进制a^n % pll poww(ll a, ll n, ll p) { ll ans = 1; while (n) { if (n & 1) ans = ans * a % p;//若不取模就去掉p a = a * a % p; n >>= 1; ...原创 2020-03-08 10:11:38 · 424 阅读 · 0 评论 -
唯一分解定理
定义任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1 P2^a2 P3^a3 …Pn^an,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。模板struct Node { int p; int ci;} a[70] = {0};int j;void fenji...原创 2020-03-08 10:09:56 · 355 阅读 · 0 评论 -
扩展欧几里得算法
欧几里得算法求最大公约数int gcd(int a, int b) { while (b) { int temp = b; b = a % b; a = temp; } return a;}求最小公倍数int lcm(int a, int b) { return a * b / gcd(a, b);...原创 2020-03-08 10:09:14 · 100 阅读 · 0 评论 -
质因子&容斥原理求与n互质的个数
求一个数的质因子//求一个数的质因子,将质因子储存在a[],并返回质因子的个数int init(ll n) { ll i; idx = 0; for (i = 2; i * i <= n; i++) { if (n % i == 0) { a[idx++] = i; while (n % i ...原创 2020-03-08 10:03:54 · 362 阅读 · 0 评论 -
二维偏序 && 离散化
二维偏序#include <cstdio>#include <cstring>#include <cmath>#define max 32001using namespace std;int c[max], ans[max], x, y, n;int sum(int x) { int s = 0; while (x > ...原创 2020-01-23 12:51:55 · 187 阅读 · 0 评论