210 likes | 581 Views
ACM/ICPC 中的数学. 李凤界 lfj_2@126.com. 数论 组合数学(计数问题) 博弈 概率 二、三分,积分. 预备代数知识. 代数结构 半群 群、子群、 Lagrange 定理 环、交换幺环. 快速幂乘. 半群上元素幂的 lgN 算法 计算 a^b%c 细节:在 32 位机器上如何计算 64 位整数相乘对 64 位整数取模? 矩阵快速幂乘 Fibnacci 数列 题目:字符串接力计数. 初等数论在 ICPC 中的几点. Euclid 辗转相除法 中国剩余定理 Euler 定理. 一些记号和结论.
E N D
ACM/ICPC中的数学 李凤界 lfj_2@126.com
数论 • 组合数学(计数问题) • 博弈 • 概率 • 二、三分,积分
预备代数知识 • 代数结构 • 半群 • 群、子群、Lagrange定理 • 环、交换幺环
快速幂乘 • 半群上元素幂的lgN算法 • 计算a^b%c细节:在32位机器上如何计算64位整数相乘对64位整数取模? • 矩阵快速幂乘Fibnacci数列题目:字符串接力计数
初等数论在ICPC中的几点 • Euclid辗转相除法 • 中国剩余定理 • Euler定理
一些记号和结论 • 整除 :若a = b*q , b!=0 , 称b整除a,记作b|a • 同余:若c|(b-a),称a,b对c同余,记作a = b(mod c) • 除法定理:给定a,b两个整数,b> 0,则存在两个唯一的整数q,r,使得a = b*q+r,0<=r<b成立 • 唯一分解定理(标准分解):任一自然数n>0,均可唯一表示为素数之积:
最大公约数 • 最小公倍数 • 模m的剩余类环 • 缩系
N个数的最大公约数给定N个数,求它们的最大公约数N个数的最大公约数给定N个数,求它们的最大公约数
Euclid辗转相除法 • 给定a,b不全为0,求gcd(a,b) • 结论: • 复杂度O(lg(b)),可参看《算法导论》
青蛙的约会(浙江OI):长L的纬度线上,两只青蛙同时往西跳,规定从东往西为正方向建立坐标轴,两只青蛙的坐标分别为x和y,每一跳分别跳m米和n米,二只青蛙每一跳花的时间相同。问两只青蛙能否相遇?青蛙的约会(浙江OI):长L的纬度线上,两只青蛙同时往西跳,规定从东往西为正方向建立坐标轴,两只青蛙的坐标分别为x和y,每一跳分别跳m米和n米,二只青蛙每一跳花的时间相同。问两只青蛙能否相遇?
拓展Euclid算法 • 给定a,b不全为0,求d,x,y使得d=gcd(a,b)=a*x+b*y注:不唯一,调整下就可以作为另一组解 • 在Euclid算法上作一点手脚:设 a > b > 0 , a = b*q + c(除法定理)若d = x’*b + y’*c则d = y’*a + (x’ – q)*b
exEuc最直接的实现(C++) • struct T{ • int d,x,y; • }; • T exEuc(int a,int b){ • if( b == 0)return T(a,0,0); • T tmp = exEuc(b,a%b); • return T(tmp.d, tmp.y, tmp.x-(a/b)*tmp.y); • }//自己证明求得的x,y是否小于max(a,b)
中国剩余定理 • 两两互素,求一次同余方程组 的解 • 只看n=2,构造 • POJ2891
质数表 • 质数表:保存素因子,标准分解 • 平方往外筛法(O(n*lglg(n)),复杂度未验证) • 线性筛法(O(n))
Euler函数 • 小于n且与n互素的数的个数 • n为素数或素数幂时的 • 若 • 设n的标准分解为
Euler定理 • 若(a,n)=1,则 • Fermat小定理
多少个连续的8能整除给定的数m(网络赛) • 质数原根个数(贾怡@PKU) • 大素数检验的Miller-Rabin概率算法
单调函数(数列)二分求解如有序数列的查找方程的数值计算(二分法求数值解)次数(复杂度) :离散的:lg(n);方程的 • 单峰函数:三分法求峰值:dp优化等 • 数值积分基本概念Gauss型 • 外推法,Romberg数值积分