Day 6的第二部分,数论
数论是纯粹数学的分支之一,主要研究整数的性质
 
1.一些符号:
a mod b 代表a除以b得到的余数
a|b a是b的约数
floor(x) 代表x的下取整,即小于等于x的最大整数,也可以认为是直接舍去小数部分
(这个应该是一个符号,但我不知道怎么打出来。。下面那个ceil也是)
ceil(x) 代表x的上取整,即大于等于x的最小整数,也可以认为是直接舍去小数部分再+1.
gcd(a,b) 表示a与b的最大公约数
lcm(a,b) 表示a与b的最小公倍数
累加符号∑ 累乘符号∏
logab代表以a为底的b的对数,ln表示以e为底的对数,lg代表以10为底的对数
 
2.质数
也称素数,是质因子只有1和它本身的数。
与质数相对的是合数,合数在因数拆分时可以拆分成至少两对其他数的乘积。
特殊规定,1既不是质数也不是合数。
可以证明,素数是无限多个的,证明从略。
 
3.唯一分解定理
算术基本定理之一。
定理是这样描述的:对于每一个大于1的自然数都可以写成质数的积,而这些因子按照大小排列后,只有一种结果(写法只有一种)。
我并不会证。。。我太弱了
这个定理是分解质因数的基础。它告诉我们可以用质数乘积的形式处理一些大数字,处理一类和约数有关的问题。
显然,一个数n最多有一个大于√n的质因子。
 
4.筛法
用来快速求一个数是不是质数的算法
通常有两种筛法:埃氏筛和欧拉筛
 
4.1埃氏筛法
核心思想:从2到n枚举,当找到一个质数时,枚举它的所有倍数,这些倍数绝对不可能是质数。
int cnt;
int prime[maxn];
bool vis[maxn];
void Eratosthenes(int n){
for (int i=;i<=n;i++)
if (!vis[i]){
prime[++cnt] = i;
for (int j = i*;j<=n;j+=i)
vis[j] = ;
}
}
 
时间复杂度是O(nloglogn),证明从略。
 
4.2欧拉筛法
核心思想是通过让每一个数只会被它最小的质因子筛到,从而每个数只会被筛一次,时间复杂度O(n)。
对于任意一个合数,我们可以拆成最小质因子*某数i的形式,我们枚举这个数i,然后再枚举出所有筛的质数。
当我们枚举的质数可以整除i时,如果再往大里枚举,枚举的质数就不可能是最小质数了。这时就可以终止循环,继续枚举下一个i。
int cnt;
int prime[maxn];
bool vis[maxn];
void Eular(int n){
for (int i=;i<=n;i++){
if (!vis[i])
prime[++cnt] = i;
for (int j=;j<=cnt && prime[j]*i<=n;++j){
vis[prime[j]*i] = ;
if (i % prime[j] == )
break;
}
}
}
 
 
5.取模
我想您应该早已熟知余数的定义。
a % b(就是a mod b)得到的结果是a除以b得到的余数。
性质:a %b = a-(a/b)*b
一些题目要求对答案取模,如果这个答案是负的,应该加上模数而不是除。
取模的性质:
(a±b) % p = ((a % p) ± b) % p
(a*b) %p=(a % p) * (b % p)
 
6.最大公约数
辗转相除。
int gcd(int a, int b){
  if (!b)
    return a;
  return gcd(b, a % b);
}
 
 
7.同余
这里引入一个新符号,a≡b(mod n)表示a与b在模n意义下的余数相同,称为a与b同余。
同余的性质:
1.反身性 a≡a (mod m)
2.对称性 若a≡b(mod m),则b≡a (mod m)
3.传递性 若a≡b (mod m),b≡c (mod m),则a≡c (mod m)
4.同余式相加 若a≡b (mod m),c≡d(mod m),则a+c≡b+d (mod m)(或换成-)
5.同余式相乘 若a≡b (mod m),c≡d(mod m),则ac≡bd (mod m)
 
7.1逆元
如果 ax≡1(mod n),那么x为a关于模n意义下的逆元。
逆元一般用inv简称。
当gcd(a,n) = 1时x为一唯一值,否则不存在,证明从略。
其实可以这么想,x为模n意义下的倒数,也就是1/a,我们可以类比实数意义下的倒数在模n意义下a乘以b的逆元,相当于模n意义下的a/b。
求逆元的方法,接下来讲。
 
8.扩展欧几里得算法
(借鉴了gty哥哥课件的思路)
简称扩欧,exgcd。
用来求解形似ax+by = gcd(a,b)一类方程的解。
这里的x和y不一定是正整数,有可能是负数或0.
比如说我举个例子,求一直线ax+by+c = 0上有多少个整数点(x,y)满足x∈[x1,x2],y∈[y1,y2]
边界情况:
当b=0时,gcd(a,b)=a,x=1,y=0
假设 ax1 + by1= gcd(a,b),bx2 + (a % b)y2= gcd(b,a % b)
由gcd的意义,知gcd(a,b) = gcd(b,a % b),那么有ax1 + by1 = bx2+ (a % b)y2;
也就是说ax1 + by1 = bx2 + (a - [a / b] * b)y2 = ay2 + bx2 - [a / b] * by2;
也就是说ax1 + by1 == ay2+ b(x2 - [a / b] *y2);
那么,x1 = y2; y1 = x2 - [a / b] * y2;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2。我们可以通过不断递归调用求解。
void exgcd(int a, int b, int &d, int &x, int &y){
  if (!b) {
    d = a;
    x = ;
    y = ;
  }
  else {
    exgcd(b, a % b, d, y, x);
    y -= (a / b) * x;
  }
}
我们这样只能得出一组解,其他解呢?如果我们现在有解(x1,y1),任取另外一组解(x2,y2),则有ax1 + by1 = ax2 + by2 = gcd(a, b),变形可以得到a(x1 – x2) = b(y2 – y1),两边同时除以gcd(a, b),得到a’(x1 – x2) = b’(y2 – y1),因为(a’,b’)=1,所以(x1-x2)一定是b’的倍数,取x1-x2=kb’,得y2-y1=ka’。
所以我们有以下结论:
对方程ax+by+c=0,一组整数解为(x0,y0),则它的任意整数解可以写成(x0+kb’,y0-ka’),其中a’=a/gcd(a, b),b’=b/gcd(a, b)
关于ax+by=c有没有解,我们有这么一个结论:
对于方程ax+by=c(a,b,c均为整数),如果c为gcd(a,b)的倍数,则方程有整数解,反之无整数解。因为a和b都是gcd(a,b)的倍数,所以ax+by一定也是gcd(a,b)的倍数,如果c不是gcd(a,b)的倍数,一定无解。
那刚才那道题怎么做呢?
方程变形为ax+by = -c,看一下-c是不是gcd(a,b)的倍数,然后用exgcd求一下ax+by = gcd(a,b)的解,记为(x0,y0)。
等式两边同乘(-c)/gcd(a,b),就有ax0'+by0' = -c
用刚才的结论,求出使x = x0 + kb'落在区间[x1,x2]内的k的范围和使y = y0-ka'落在区间[y1,y2]内的k的范围,取交集就是答案。
 
9.费马小定理
如果p是质数,并且gcd(a,p) = 1,那么 a^(p-1) ≡ 1 (mod p)
由这个式子我们可以知道,a关于p的逆元就是a^(p-2) % p,用快速幂就好,证明从略。
 
10.快速幂
快速幂用了一个倍增的思想,我把它放在Part 3.
 
11.排列组合
 
11.1排列
排列数指的是从n个数中任取m个元素排成有顺序的一列,这一列称为一个排列,所有排列总数称为排列数。
生成排列数:DFS 或 next_permutation
从n个元素里取m个成为排列记为A(n,m) (原谅打不出来)
A(n,m) = n * (n-1) * (n-2) * (n-3) * ... * (n-m+1) = n!/(n-m)!
11.2组合
组合数指的是从n个数中任取m个 元素设为一组,叫做一个组合,这样所有的组合的数量就是组合数。
可以发现,排列要求元素带有顺序,而组合则不考虑顺序。
公式是C(n,m) = n * (n-1) * (n-2) * (n-3) * ... * (n-m+1)/m! = n!/m!(n-m)!
组合的性质:
C(n,m) = C(n-1,m-1) + C(n-1,m)
C(n,m) = C(n,n-m)
C(n,m) = C(n,m-1)*(n-m+1)/m (m>0)
由性质3可递推某一n确定下的组合数
 
其实排列组合这一块有很多内容,然而。。。
我觉得我讲得再多也没高中数学选修2-3讲得明白。。。。
所以,如果有没提到的地方,请参见高中数学选修2-3。。
 
 
 
 
 
 
 

夏令营讲课内容整理 Day 6 Part 2.的更多相关文章

  1. 夏令营讲课内容整理 Day 7.

    Day7是夏令营的最后一天,这一天主要讲了骗分技巧和往年经典的一些NOIP试题以及比赛策略. 这天有个小插曲,上午的day7T3是一道和树有关的题,我是想破脑袋也想不出来,正解写不出来就写暴力吧,暴力 ...

  2. 夏令营讲课内容整理 Day 3.

    本日主要内容是树与图.   1.树 树的性质 树的遍历 树的LCA 树上前缀和   树的基本性质: 对于一棵有n个节点的树,必定有n-1条边.任意两个点之间的路径是唯一确定的.   回到题目上,如果题 ...

  3. 夏令营讲课内容整理Day 0.

    今年没有发纸质讲义是最气的.还好我留了点课件. 第一次用这个估计也不怎么会用,但尝试一下新事物总是好的. 前四天gty哥哥讲的内容和去年差不多,后三天zhn大佬讲的内容有点难,努力去理解吧. 毕竟知识 ...

  4. 夏令营讲课内容整理 Day 6 Part 3.

    第三部分主要讲的是倍增思想及其应用. 在Day3的整理中,我简要提到了倍增思想,我们来回顾一下. 倍增是根据已经得到的信息,将考虑的范围扩大一倍,从而加速操作的一种思想,它在变化规则相同的情况下,加速 ...

  5. 夏令营讲课内容整理 Day 6 Part 1.

    Day6讲了三个大部分的内容. 1.STL 2.初等数论 3.倍增   Part1主要与STL有关. 1.概述 STL的英文全名叫Standard Template Library,翻译成中文就叫标准 ...

  6. 夏令营讲课内容整理 Day 5.

    DP专场.. 动态规划是运筹学的一个分支, 求解决策过程最优化的数学方法. 我们一般把动态规划简称为DP(Dynamic Programming)   1.动态规划的背包问题 有一个容量为m的背包,有 ...

  7. 夏令营讲课内容整理 Day 4.

    本日主要内容就是搜索(打暴力 搜索可以说是OIer必会的算法,同时也是OI系列赛事常考的算法之一. 有很多的题目都可以通过暴力搜索拿到部分分,而在暴力搜索的基础上再加一些剪枝优化, 就有可能会拿到更多 ...

  8. 夏令营讲课内容整理 Day 2.

    本日主要内容是并查集和堆. 并查集 并查集是一种树型的数据结构,通常用来处理不同集合间的元素之间的合并与查找问题.一个并查集支持三个基本功能:合并.查找和判断.举一个通俗的例子,我和lhz认识,lhz ...

  9. 夏令营讲课内容整理Day 1.

    主要内容是栈和队列. 1.  栈 运算受到限制的线性表.只允许从一端进行插入和删除等操作.这一端便是栈顶,另一端便是栈底. 其实可以把栈想象层任何有底无盖的柱状的容器...毕竟栈满足后进先出的特性.计 ...

随机推荐

  1. 解决CSS垂直居中的几种方法(基于绝对定位,基于视口单位,Flexbox方法)

    在CSS中对元素进行水平居中是非常简单的:如果它是一个行内元素,就对它的父元素应用 text-align: center ;如果它是一个块级元素,就对它自身应用 margin: auto.然而如果要对 ...

  2. Java Web学习路线图

    三张Java Web完整学习路线图,阶段一和JavaSE部分可不学

  3. 修改nopCommerce中的实体

                               对已有实体增加一个属性(对Category增加一个SomeNewProperty)   最近在研究nopcommerce,这里是对官网上文档的学习 ...

  4. window下spyder的快捷键

    块注释/块反注释 Ctrl + 4/5 断点设置 F12 关闭所有 Ctrl + Shift + W 代码完成 Ctrl +空格键 条件断点 SHIFT + F12 配置 F6 复制 Ctrl + C ...

  5. C语言第二次实验报告

    1.实验题目 题1:11-7 找鞍点(20 分) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点    题2: ...

  6. asp.net -mvc框架复习(11)-基于三层架构与MVC实现完整的用户登录

    一.先从M部分写起(Modles\DAL\BLL) 1.Modles 实体类:上次实体类已经搞定. 2.DAL 数据访问类类 (1)通用数据数据访问类: A:  先编写数据连接字符串,写到网站根目录W ...

  7. SQL中MAX()

    列column_name中的数据可以是数值.字符串或是日期时间数据类型.

  8. Java数据持久层框架 MyBatis之背景知识二

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  9. 完美解决打开github速度慢的问题

    摘抄自知乎. 修改hosts(HOSTS文件路径:C:\Windows\System32\drivers\etc\hosts) 1.打开Dns检测|Dns查询 - 站长工具 2.在检测输入栏中输入ht ...

  10. HTML5入门要点

    要点 HTML5是HTML的最新版本.通过引入心的标签.新的语义和媒体元素,同时要依赖一组支持Web应用的JavaScript库 XHTML不再是Web页面开发标准.开发人员和W3C组织觉决定还是继续 ...