数论&数学

数论&数学从入门到放弃


组合数学

组合数学常用公式

组合数:

将n个不同的球放入m个相同的盒子里的方案数

(从 n 个不同元素中每次取出 m 个不同元素,不管其顺序合成一组,称为从 n 个元素中不重复地选取 m 个元素的一个组合。所有这样的组合的种数称为组合数。)

递推公式:C(n,m)= C(n - 1,m - 1)+ C(n - 1,m)

(其它计算公式见组合数学常用公式

推导方法:

  • 若新的球独占一个盒子,则其它球占 m - 1 个盒子,共有 C(n - 1,m - 1)种方案
  • 若新的球与其它球共用盒子,则分别与其它数在一个盒子,但有 n - 1 - m 个数是与其它数在同一集合中的,所以重复了 n - 1 - m 次,共有 C(n - 1,m - 1)* n / (n - 1 - m)= C(n - 1,m)

只能向右、上走,从(0,0)到(n,m)的方案数

相当于在 n + m 个操作中选 n 个为上(横坐标加一)的方案数

即为 C(n + m,m)或 C(n + m,n)

从(0,0)到(n,m)不碰到 直线y = x + b 的方案数

计算公式:C(n + m,m)- C(n + m,n - b)

推导方法:

  • 总方案数为 C(n + m,m)
  • 将坐标系沿直线翻折,翻折后起点为(b,n - b),从翻折后的起点出发到达终点必会经过直线,且翻折后起点出发的路径都对应一条从原起点出发的路径

  • 翻折后方案数 C(b + m + n - b,n - b)
  • 所以不合法的方案数为 C(n + m,n - b)

 斯特林数

第一类斯特林数

n 个人坐 m 张圆桌的方案数

推导公式:s(n,m)= s(n - 1,m - 1)+ s(n - 1,m)*(n - 1)

推导方法:

  • 新一个人单独做一张圆桌,方案数为 s(n - 1,m - 1)
  • 新一个人与其它人共坐圆桌,他可以在任意一个人的左边坐下,所以对于之前的每一种方案都有 n - 1 种方案,根据乘法原理,方案数为 s(n - 1,m)*(n - 1)

第二类斯特林数

n 个球分成 m 个集合的方案数

推导公式:S(n,m)= S(n - 1,m - 1)+(n - 1,m)* m

推导方法:和上一种差不多

容斥原理

card表示集合的大小

card(a∪b)= card(a)+ card(b)- card(a∩b)

card(a∪b∪c)= card(a)+ card(b)+ card(c)- card(a∩b)- card(b∩c)-card(a∩c)+ card(a∩b∩c)

……


扩展欧几里得

用来求形如 a x + b y = gcd(a,b)的不定方程特解,且求出的解满足 |x|+|y| 最小

void exgcd(int a, int b, int &d, int &x, int &y) {
    b ? exgcd(b, a % b, d, y, x), y -= x * (a / b) : d = a, x = 1, y = 0;
}

欧拉定理

其中φ(n)为欧拉函数,即小于等于 n,且与 n 互质的数的个数。(a,n互质)

对于指数很大的情况,可以根据欧拉定理降幂


逆元

若满足

则称B在模A意义下的乘法逆元,逆元可以用来求带取模的除法

逆元的求法:

  • 根据欧拉定理,快速幂求出:B = AP - 2 % P
  • 解方程 P x + A y = 1,则 A y = 1 - P x,y Ξ 1 / A (mod P
  • 递推求逆元:

即 inv[i] = p -(p / i * inv[p % i])% p


质数的求法

单个质数:

使用试除法,用小于等于sqrt(x)的数试除 x 若能除尽,则 x 为合数

bool prime(int x) {
	if(x == 2)return 1;
	if(x % 2 == 0 || x == 1)return 0;
	for(int i = (int)sqrt(x) | 1; i >= 3; i -= 2)
		if(x % i == 0)return 0;
	return 1;
}

求 1 ~ n之间的质数

使用筛法求质数

//复杂度很低的筛法
for(int i = 2; i <= n; i ++)
	if(! w[i]) {
		p[ ++cnt] = i;
		for(int j = 2; j <= i; j ++)w[i * j] = 1;
	}

  

//线性筛法
for(int i = 2; i <= n; i ++) {
	if(! w[i])p[ ++cnt] = i;
	for(int j = 1; j <= cnt && i * p[j] <= n; j ++) {
		w[i * p[j]] = 1;
		if(i % p[j] == 0)break;
	}
}

中国剩余定理

给出若干个方程,每一个都形如 x % Pi = ai,Pi互质且互不相同


BSGS算法

求形如 ax Ξ b (mod P) 的方程的解

原文地址:https://www.cnblogs.com/akakw1/p/9737555.html

时间: 2024-08-30 08:09:16

数论&数学的相关文章

UVA12716 GCD XOR 数论数学构造

题目给你一个N,让你求 两个数字 A,B,且   A>=B<=N,是的 gcd(A,B) == A^B N的范围是 3*10^7大的吓人一开始没敢想构造,因为就算构造开的数组也太大了,已经10^7了,后来想了半天在^运算这里也没有想出来什么,所以没办法还是大胆构造吧,构造就去按照他题目的意思来了,构造两个数字 i,j其中j是i的倍数,那么j + i与i的最大公约数肯定是i了,那么(j+i)^i == i这样构造出来的就算满足了,然后再模仿gcd辗转相除的愿意  把它们放在一个数组里计数,这样预

noip2017考前基础复习——数论数学

·最大公约数 gcd 辗转相除法  gcd(a,b)=gcd(b,a%b) 1 int gcd(int x,int y){ 2 if(y==0) return x; 3 return gcd(y,x%y); 4 } 效率O(logn) ·最小公倍数 lcm 可由最大公约数推来 lcm(a,b)=a*b/gcd(a,b) 1 int lcm(int x,int y){ 2 int p=gcd(x,y); 3 return a*b/p; 4 } 效率O(logn) ·扩展欧几里得 extgcd 求a

「SPOJ5971」 LCMSUM - 数论数学

题目描述 求 \(\sum_{i=1}^nlcm(i,n)\) \(T\) 组数据 \(1\le T\le 300000\) \(1\le n\le 1000000\) 链接 bzoj 2226 luogu SP5971 题解 算法1(暴力) 直接暴力枚举 \(i\) ,计算 \(lcm\) 时间复杂度 \(O(Tnlogn)\) 算法2 (数论) 先不管最后一个,就变成了这个: \[ \sum_{i=1}^{n-1}lcm(i,n) \] 将 \(lcm\) 转化为 \(gcd\): \[ A

Codeforces 963A Alternating Sum 【数论+数学】

官方题解这个样子我觉得说得比较清楚.Z我们可以朴素的预处理出来(注意乘法膜),q的话考点在于[分数取膜]即 (a/b)%P = a* inverse of b %P 这就涉及到算b的逆元,我用的是欧几里得算法.下面这个博客写的很清楚. http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 然后还有两个细节,一是要写快速幂这样才能 O(k * log(n)) 复杂度预处理出Z,快速幂的时候注意a的类型得是long lon

洛谷P1984 SDOI2008烧水问题

P1984 [SDOI2008]烧水问题 186通过 438提交 题目提供者lych 标签数论(数学相关)模拟各省省选 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 求助! 也是醉了... 题目有问题 这个不是SDOI的题吧... 这是什么???? 题目描述 把总质量为1kg的水分装在n个杯子里,每杯水的质量均为(1/n)kg,初始温度均为0℃.现需要把每一杯水都烧开.我们可以对任意一杯水进行加热.把一杯水的温度升高t℃所需的能量为(4200*t/n)J,其中,“J”是能量单位“焦耳”

noip2013 转圈游戏

P1965 转圈游戏 625通过 1.8K提交 题目提供者该用户不存在 标签数论(数学相关)递归/分治2013NOIp提高组 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 洛谷有缺陷 题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推.游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m

codevs3732==洛谷 解方程P2312 解方程

P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .in. 输入共n + 2 行. 第一行包含2 个整数n .m ,每两个整数之间用一个空格隔开. 接下来的n+1 行每行包含一个整数,依次

P1066 2^k进制数

P1066 2^k进制数 204通过 373提交 题目提供者洛谷OnlineJudge 标签数论(数学相关)高精NOIp提高组2006 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后,则q的总位数不超过w. 在这里,正整数k(1≤k≤9)和w(k<W< span>≤

noip2011 计算系数

P1313 计算系数 431通过 1.4K提交 题目提供者该用户不存在 标签数论(数学相关)2011NOIp提高组 难度普及/提高- 提交该题 讨论 题解 记录 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开. 输出格式: 输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模