数论
陌离将离
这个作者很懒,什么都没留下…
展开
-
3 快速幂 快速乘
快速幂所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。快速幂1 递推写法LL pow_mod(LL a, LL b) {//a的b次方 LL ret = 1; while(b != 0) { if(b % 2 ...原创 2017-05-13 16:31:20 · 328 阅读 · 0 评论 -
13 算数基本定理(唯一分解定理)
算术基本定理可表述为:任何一个大于1的自然数 ,都可以唯一分解成有限个质数的乘积 ,这里 均为质数,其诸指数 是正整数。这样的分解称为 的标准分解式。定理应用: 贴上代码: #include<bits/stdc++.h> #define MAXN 1e5 int N; bool isprime[MAXN]; int prime[...原创 2018-07-26 20:03:46 · 513 阅读 · 0 评论 -
12 逆序数
利用归并排序求解归并排序的主要思想是将整个序列分成两部分,分别递归将这两部分排好序之后,再和并为一个有序的序列。 在合并的过程中是将两个相邻并且有序的序列合并成一个有序序列,如以下两个有序序列Seq1:3 4 5Seq2:2 6 8 9合并成一个有序序:Seq:2 3 4 5 6 8 9对于序列seq1中的某个数a[i],序列seq2中的某个...原创 2018-07-26 18:09:10 · 265 阅读 · 0 评论 -
11 抽屉原理、鸽巢原理
桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。” 抽屉原理有时也被称为鸽巢原理。它是组合数学中一个重要的原理。第一抽屉原理原理1: 把多于n+1...原创 2018-07-26 11:05:53 · 572 阅读 · 0 评论 -
10 容斥原理
定义:在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法。这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复。这种计数的方法称为容斥原理。 原理好懂,难的是应用 一、hdu - 1465n封信对应n个信封,求恰好全部装错了信封...原创 2018-07-26 10:59:23 · 287 阅读 · 0 评论 -
9 康托展开
一、康托展开康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。公式:其中, a[i]为整数,并且0 <= a[i] <= i, 0 <= i < n, 表示当前未出现的的元素中排第几个,这就是康托展开。...原创 2018-07-25 20:11:48 · 159 阅读 · 0 评论 -
8 中国剩余定理
百度百科:中国剩余定理给出了以下的一元线性同余方程组: 中国剩余定理说明:假设整数m1,m2, ... ,mn两两互质,则对任意的整数:a1,a2, ... ,an, 方程组(S)有解,并且通解可以用如下方式构造得到:设 是整数m1,m2, ... ,mn的乘积,并设 是除了mi以外的n- 1个整数的乘积。设 这个就是逆元了 通解形...原创 2018-07-25 19:04:18 · 206 阅读 · 0 评论 -
7 组合数
组合数就是下面这样一个式子 一、组合数求组合数一般用杨辉三角性质,递推去求,但时间复杂度太高,还要取余所以用逆元去求比较简单,根据上面的公式,需要求阶乘和逆元阶乘代码如下:const int N = 200000 + 5;const int MOD = (int)1e9 + 7;int F[N], Finv[N], inv[N];//F是阶乘,Finv是逆元的阶乘 ...原创 2018-07-25 14:45:54 · 379 阅读 · 0 评论 -
6 数论倒数----逆元
逆元定义:a和p互质时有 a * x = 1 (mod p) 则x称为a关于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 (对)(a / b) % p = (a%p / b%p) %...原创 2018-07-25 11:26:12 · 459 阅读 · 0 评论 -
5 费马定理
费马小定理假如p是质数,若p不能整除a,则 a^(p-1) ≡1(mod p),若p能整除a,则a^(p-1) ≡0(mod p)。或者说,若p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1。 了解 费马大定理又被称为“费马最后的定理”,由法国数学家费马提出。它断言当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没...原创 2018-07-25 10:41:53 · 586 阅读 · 0 评论 -
4 扩展欧几里德算法
问题引入:直线上的点,求直线ax+by+c=0上有多少整点(x, y)满足x∈[x1, x2],y∈[y1, y2]。 首先学习扩展欧几里德算法。找出一对整数(x, y),使得ax+by=gcd(a, b)。算法程序:void extend_Eulid(LL a, LL b, LL &x, LL &y, LL &d) { if (!b) {d = a...原创 2018-07-24 10:36:23 · 137 阅读 · 0 评论 -
2 埃氏筛法 求素数
初始版本:int prime[SIZE]; // 第i个素数bool is_prime[SIZE]; //true表示i是素数int slove(int n) { int p = 0; for(int i = 0; i <= n; i++) is_prime[i] = true; //初始化 ...原创 2018-05-04 14:42:53 · 278 阅读 · 0 评论 -
1 辗转相除 最大公约数 最小公倍数
公式:a * b = gcd * lcmint gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b);}int lcm(int a, int b) {return a / gcd(a, b) * b;}补: gcd(ka, kb) = k * gcd(a, b) lcm(ka, kb) = k * ...原创 2018-04-28 20:59:14 · 188 阅读 · 0 评论 -
14 高斯消元
数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。不过,如果有过百万条等式时,这个算法会十分省时。一些极大的方程组通常会用迭代法以及花式消元来解决。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。主要是用来求解线性方程组,根据方程组得出增广矩阵,对增广矩阵进行...原创 2018-07-27 18:16:17 · 237 阅读 · 0 评论