顶函数(\(\lceil {x} \rceil\))、底函数(\(\lfloor {x} \rfloor\)):

常称之为高斯(取整)函数。

定义:

顶函数:\(\geq {x}\)的最小整数。
底函数:\(\leq {x}\)的最大整数。
举个例子:

\(1.\lceil {1.5} \rceil=2\)
\(2.\lfloor {1.5} \rfloor=1\)
\(3.\lceil {-1.5} \rceil=-1\)
\(4.\lfloor {-1.5} \rfloor =-2\)

带余除法:

定义:

\(对于任意整数a,b(a\geq b,b\neq 0),\)\(存在q,r,满足a=qb+r(0\leq r \leq |b|),且q,r唯一\)
我们把a叫做被除数,b叫做除数,q叫做商,r叫做余数。
可以证明\(q=\lfloor \left (\frac {a}{b}\right )\rfloor,r=a-b\lfloor \left(\frac {a}{b} \right)\rfloor\)(证明如下)

\(\because这个是很显然的\)
\(\therefore q=\lfloor \left (\frac {a}{b}\right )\rfloor,r=a-b\lfloor \left(\frac {a}{b} \right)\rfloor\)

整除:

定义:如果\(a\)能把\(b\)除尽,余数为0,那么就说是\(b\)被\(a\)整除,即\(a|b\)。

整除的性质:

  • 自反性:对于任意\(n\),有\(n|n\)。
  • 传递性:若\(a|b,b|c\),那么\(a|c\)。
  • 反对称性:若\(a|b,b|a\),即\(a=b\)。(对称性:若\(a\)满足\(b\cdots\)关系,那么\(b\)也满足\(a\cdots\)关系)
  • 若\(b|a,c|b\),则\(c|a\)。(证明如下)

    \(\because b|a,c|b\)
    \(\therefore(所以必然存在两个整数x,y)使得a=xb\),\(b=yc\)
    \(又\therefore a=xyc\)
    \(\because a/c=xy\)
    \(\therefore c|a\)

  • 若\(c|a,c|b\),则对任意数\(x,y\),必有\(c |(ax+by)。\)(证明如下)

    \(\because c|a,c|b\)
    \(\therefore (所以必然存在两个整数p,q)使得a=pc\),\(b=qc\)
    \(又\therefore c |(pcx+qcy)\)
    \(c|c(px+qy)\)
    \(\because 两边都有c\)
    \(\therefore c(px+qy)是c的倍数\)
    \(又\therefore c|(ax+by)\)

  • 若\(b|a,a\neq 0\),则有\(|b| \leq |a|\)。(证明如下)

    \(\because b|a\)
    \(\therefore (所以必然存在一个整数q)使得a=qb\)
    \(又\therefore a是b的倍数,|b| \leq |a|\)。

  • 若\(b|a,a\neq 0\),则\(\left( \frac ab \right)|a\)。(证明如下)

    \(\because b|a\)
    \(\therefore (所以必然存在一个整数q)使得a=qb\)
    \(又\therefore \left( \frac {a}{b} \right)=\left( \frac {qb}{b} \right)=q\)
    \(\because a是q的倍数\)
    \(\therefore q|a\)
    \(又\therefore \left(\frac{a}{b}\right)|a\)

  • 若\(b|a,c|a,b\bot c\),则\(bc|a\)。(举例如下)

    \(1.当a=12,b=1,c=6时,1|12,6|12,1\bot12,6|12。\)
    \(2.当a=72,b=8,c=9时,8|72,9|72,8\bot9,72|72。(自反性:72|72)\)

  • 若\(a|b,b|a\),则\(|a|=|b|\)。(反对称性)
  • 若\(a|b\),对任意整数\(c\),则\(a|bc\)。(证明如下)

    \(\because a|b\)
    \(\therefore b=xa,b是a的倍数\)
    \(又\therefore乘上任意整数c,bc依旧是a的倍数\)
    \(又\therefore a|bc\)

  • 若\(a|b\),对于任意整数\(m(m\neq0)\),则\(ma|mb\)。(证明如下)

    \(\because 这是显然的\)
    \(\therefore ma|mb\)

    唯一分解定理(算术基本定理):

    \(n=p_1^{r_1}*p_2^{r_2}*\cdots\)
    其中\(p_i\)是质数,\(p_1=2,p_2=3 \cdots\)以此类推

    结论:

    设\(p\)为质数,对于任意整数\(a\),则有\(p|a\)或者\((p,a)=1\)。(证明如下)

    \(\because p为质数\)
    $\therefore a要么是p的倍数,要么p\perp a。 $
    \(又\therefore p|a或者(p,a)=1\)

    约数和倍数:

    推论:

    在算术基本定理中,若\(N\)被唯一分解为\(N=p_1^{c_1}p_2^{c_2}\cdots p_m^{c_m}\),其中\(c_i\)是正整数,\(p_i\)是质数且满足\(p_1<p_2<\cdots p_m\),则\(N\)的正整数集合可写作\(:\)

    {\(p_1^{b_1}p_2^{b_2}\cdots p_m^{b_m}\)},其中\(0\leq b_i \leq c_i\)
    N的正约数个数为\(:\)
    \[(c_1+1)*(c_2+1)*\cdots*(c_m+1)=\prod_{i=1}^{m}(c_i+1)\]
    \(N\)的所有正约数之和为\(:\)
    \[(1+p_1+p_1^2+\cdots+p_1^{c_1})*\cdots*(1+p_m+p_m^2+\cdots+p_m^{c_m})=\prod_{i=1}^{m}(\sum_{j=0}^{c_i}(p_i)^{j})\]

    定义:

    若\(a|b,a\)是\(b\)的约数,\(b\)是\(a\)的倍数,称\(a\)为\(b\)的因子(对于任何数\(n\),至少有两个因子\(1\)和\(n\)本身,称它们为\(n\)的平凡因子,其他即为非平凡因子)。特别的,任何正整数都是\(0\)的约数。

    约数的求法:

    1.试除法:
    因为约数总是成对出现,所以只需要从\(1\) ~\(\sqrt{n}\)。时间复杂度\(:O(\sqrt{n})\)

#include"bits/stdc++.h"
#include<time.h>
using namespace std;#define N 10086int a[N];int n;int cnt=0;int main(void) {ios::sync_with_stdio(false);cin>>n;//clock_t start = clock();for(int i=1; i<=sqrt(n); ++i) {if(n%i==0) {a[++cnt]=i;if(n/i!=i) a[++cnt]=n/i;}}for(int i=1; i<=cnt; ++i) cout<<a[i]<<" ";//clock_t ends = clock();//cout<<"\n Running time: "<<(double)(ends - start)/ CLOCKS_PER_SEC;return 0;
}

如果更改题意,给出\(l,r\),要求求\(l-r\)之间的每个数的正约数集合。那么再用试除法,时间复杂度就为\(O(N\sqrt{N})\),变得有点恶心,特别是在\(N\)非常大的时候。譬如跑\(1-100000\)。
消耗的时间如下:

运行代码如下:

#include"bits/stdc++.h"
#include<time.h>
using namespace std;#define N 10086int a[N];int n;int cnt=0;int l,r;int main(void) {ios::sync_with_stdio(false);cin>>l>>r;clock_t start = clock();for(int j=l; j<=r; ++j) {memset(a,0,sizeof(a));cnt=0;
//      cin>>n;for(int i=1; i<=sqrt(j); ++i) {if(j%i==0) {a[++cnt]=i;if(j/i!=i) a[++cnt]=j/i;}}for(int i=1; i<=cnt; ++i) cout<<a[i]<<" ";cout<<"\n";}clock_t ends = clock();cout<<"\n Running time: "<<(double)(ends - start)/ CLOCKS_PER_SEC;return 0;
}

这个时候就要用到另一种方法。即:
2.倍数法:
对于任意数\(x\),\(1-N\)中以\(x\)为约数的数就是\(x,2x,3x\cdots \lfloor N/x \rfloor*x\)。时间复杂度为\(O(N \lg N)\)
消耗时间如下:

代码如下:

#include"bits/stdc++.h"
#include<time.h>
using namespace std;#define N 100860vector<int> a[N];int n;int main(void) {ios::sync_with_stdio(false);cin>>n;clock_t start = clock();for(int i=1; i<=n; ++i)for(int j=1; j<=n/i; ++j)a[i*j].push_back(i);for(int i=1; i<=n; ++i) {for(int j=0; j<a[i].size(); ++j) {cout<<a[i][j]<<" ";}cout<<"\n";}clock_t ends = clock();cout<<"\n Running time: "<<(double)(ends - start)/ CLOCKS_PER_SEC;return 0;
}

GCD和LCM:

定义:

1.设\(a\)和\(b\)是两个整数,如果\(d|a\)且\(d|b\),则称\(d\)是\(a\)与\(b\)的公因子。
2.设\(a\)和\(b\)是两个不全为\(0\)的整数,能使\(d|a\)和\(d|b\)成立的最大整数\(d\),称它为\(a\)与\(b\)的最大公因子,或最大公约数,即\(gcd(a,b)\)。
3.设\(a\)和\(b\)是两个不全为\(0\)的整数,能使\(a|d\)和\(b|d\)成立的最小整数\(d\),称它为\(a\)与\(b\)的最小公因子,即\(lcm(a,b)\)。

例题:

如果我们把\(A\)分解成了\(2^{a_1}3^{a_2}5^{a_3}\cdots\),把\(B\)分解成了\(2^{b_1}3^{b_2}5^{b_3}\cdots\)如何快速求\(gcd(A,B)\)。(解如下)

\(\because 假设d=gcd(A,B)\)
\(\therefore d|A,d|B,d最大\)
\(d=2^{p_1}3^{p_2}5^{p_3}\cdots\)
\(\therefore p_1 \leq a_1,p_1 \leq b_1\)
\(p_2 \leq a_2,p_2 \leq b_2\)
\(\cdots\)
\(p_1=min(a_1,b_1),p_2=min(a_2,b_2),\cdots\)
\(又\therefore d=2^{min(a_1,b_1)}3^{min(a_2,b_2)}\cdots\)

2.如何快速求\(lcm(A,B)\)。(解如下)

\(把min换成max即可\)
\(\because 设c=lcm(A,B)\)
\(\therefore c=2^{max(a_1,b_1)}3^{max(a_2,b_2)}\cdots\)

\(gcd(A,B)*lcm(A,B)=A*B=c*d\)

欧几里得算法:

即辗转相除法。时间复杂度为\(O(\lg n)\)。
求\(gcd\)(给出\(a,b\)):

\(引理:若a>b,则gcd(a,b)=gcd(a-b,b)\)
\(证:1.显然a-b,b的公因数也是a,b的公因数。\)
\(2.a,b的公因数也肯定是a-b,b的公因数。\)
\(3.a,b的公因数集合与a,b的一模一样,最大的当然也一样。(更相减损术)\)
\(所以解得gcd(a,b)=gcd(a, a\bmod b)=gcd(a\bmod b,b)\) \(↰\)

\(↑\)

再证明一下上面的式子?\(↑\)

\(设c(a,b)表示a,b的所有公因数的集合,则gcd(a,b)是r(a,b)中最大的。\)
\(先尝试证明:a>b时,gcd(a,b)=gcd(a,a-b)(过程在上面)\)
\(要证这个,只需证r(a,b)=r(a,a-b)\)
\(假设d是a,b的公因数\)
\((那么必然存在两个整数p,q)使得a=pd,b=qd→d(p-q)=a-b\)
\(a,b的公因数肯定是a,a-b的公因数,反之成立\)
\(gcd(a,b)=gcd(a,a\bmod b)(一直减一个数,余下的便是a\bmod b的余数)\)
\(举例:\)
\(a=20,b=3\)
\(即gcd(20,3)→(17,3)→(14,3)→(11,3)→(8,3)→(5,3)→(2,3)\)

Code:

inline int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);//return b==0 ? a : gcd(b,a%b);
}

一条性质:
记\(f[n]\)为斐波那契数列的第\(n\)项,则有\(gcd(f[a],f[b])=f(gcd[a,b])\)。

计算\(lcm\):
\(lcm=a/gcd(a,b)*b\)
错误做法:
\(lcm=a*b/gcd(a,b)\)(会爆int)

互质:

若\(gcd(a,b)=1\),那么\(a\perp b\)。

基本定理:

1.对于任意两个质数\(n,m\),\(n\perp m\)。
2.对于任意两个相邻的整数\(n,m\),\(n\perp m\)。
3.若\(a=1\),对于任意一个自然数\(m\),\(a\perp m\)。
4.一个质数\(m\),一个合数\(n\),若\(n\)不是\(m\)的倍数,\(n\perp m\)。

同余:

定义:

若两个整数\(a,b\),且它们的差\(a-b\)能够被某个自然数\(m\)所整除,则称\(a\)与\(b\)对模\(m\)同余。记作\(a\equiv b(\bmod m)\),若\(m\)的值可以由上下文推出时,简写为\(a\equiv b\)。

性质:

1.自反性:\(a\equiv a\)。
2.对称性:若\(a\equiv b\),则%b\equiv a%。
3.传递性:若\(a\equiv b,b\equiv c\),则\(a\equiv c\)。
4.同加性:若\(a\equiv b\),则\(a+c\equiv b+c\)。
5.同乘性:(1)若\(a\equiv b\),则\(a*c\equiv b*c\)。
(2)若\(a\equiv b,c\equiv d\),则\(a*c\equiv b*d\)。
6.同幂性:若\(a\equiv b\),则\(a^n\equiv b^n\)。
7.同余式相加:若\(a\equiv b,c\equiv d\),则\(a\pm c\equiv b\pm d\)。
8.同余式相乘:若\(a\equiv b,c\equiv d\),则\(ac\equiv bd\)。
以上性质都是很显然的。

容斥原理:

基本思想:

在计算的时候,总是会有遗漏或者是重复计算的部分,为了使重复计算的部分不被重复计算,可以先算出所有可能,然后再把重复计算的部分减去。

举例:

假设某虎有\(A\)个妹子,cgp有\(B\)个妹子,他们想要知道他们一共有多少个不同的妹子(每个人都有很多,总会有相同妹子)。
先用两个圆圈表示出每个人所拥有的妹子。

then。

那么红色的部分代表的是两个人都有的妹子。
如何计算他们俩一共有多少种不同的妹子?
就需要先把他俩所拥有的妹子加起来,然后再减去红色的部分都有的妹子,就是所求。
则\(A\cup B=A+B-A\cap B\)。
那么再假设某虎依旧有\(A\)个妹子,cgp依旧也有\(B\)个妹子,突然sjp来了,sjp也有妹子,sjp突然也对这产生兴趣,于是某虎有\(A\)个妹子,cgp有\(B\)个妹子,sjp有\(C\)个妹子,他们想要知道他们一共有多少种不同的妹子(每个人都有很多,总会有相同妹子)。
那么我们先用三个圆圈表示出每个人所拥有的妹子。

then。

那么蓝色的部分代表的是三个人都有的妹子,绿色的部分代表的是某虎和cgp都有的妹子,橙色的部分代表的是cgp和sjp都有的妹子,紫色部分代表的是某虎和sjp都有的妹子。
那么如何计算他们仨一共有多少种不同的妹子?
就需要先把他们仨所拥有的妹子都加起来,然后再减去绿色的,紫色的,橙色的部分相同的妹子,最后再加上蓝色的部分的妹子,就是所求。
则\(A\cup B\cup C=A+B+C-A\cap B-A\cap C-B\cap C+A\cap B\cap C\)。

转载于:https://www.cnblogs.com/morbidity/p/10871967.html

一篇不大正经的关于数论的总结(未完相关推荐

  1. 各种友(e)善(xin)数论总集(未完待续),从入门到绝望

    目录 快速幂 扩展欧几里得 GCD 扩展欧几里得 同余系列 同余方程 同余方程组 一点想法 高次同余方程 BSGS exBSGS 线性筛素数 埃式筛 欧拉筛 欧拉函数 讲解 两道水题 法雷级数 可见点 ...

  2. 【秋招纪实录】一篇特别正经的【百度】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 百度 商业产品经理岗位 2020年秋季校园招聘 已取得offer 02 笔试 岗位的笔试时间一共2小时左右. 有一小时时间用于大题作答, ...

  3. 【秋招纪实录】一篇特别正经的【紫光展锐】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 紫光展锐 软件开发岗 2020年秋季校园招聘 已取得offer 02 笔试 紫光展锐的笔试不是特别难,相比较难度较为容易,大部分选择题都 ...

  4. 【秋招纪实录】一篇特别正经的【基恩士】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 基恩士 销售工程师岗 2020年秋季校园招聘 已取得offer 02 企业科普 随着工业自动化方面的迅速发展,KEYENCE作为传感器和 ...

  5. 【秋招纪实录】一篇特别正经的【TCL】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 TCL 软件测试岗 2020年秋季校园招聘 已取得offer 02 笔试 笔试的难度不算太难,选择题加编程题,题量较少.选择题主要以一些 ...

  6. 【秋招纪实录】一篇特别正经的【无领导小组讨论】经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 无领导小组讨论是指公司面试中,由一组应试者组成一个临时工作小组,讨论给定的问题,并做出决策.由于这个小组是临时拼凑的,并不指定谁是负责人,目的就在于考察应 ...

  7. 【秋招纪实录】一篇特别正经的【腾讯】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 腾讯 技术运营类岗位 2020年秋季校园招聘 已取得offer 02 笔试 笔试考的知识很多,但都是选择题.内容包括编程.网络.操作系统 ...

  8. 【秋招纪实录】一篇特别正经的【深信服】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 深信服 软件测试岗 2020年秋季校园招聘 已取得offer 02 企业科普 深信服科技股份有限公司是一家专注于企业级安全.云计算及基础 ...

  9. 【秋招纪实录】一篇特别正经的【建信金科】求职经验分享

    本篇推文共计2000个字,阅读时间约3分钟. 01 求职关键词 建信金科 研发技术岗 2020年秋季校园招聘 已取得offer 02 企业科普 建信金融科技是中国建设银行的全资子公司,传承建行三十年的 ...

最新文章

  1. 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理...
  2. 一种巧妙的drawable.xml替代方案
  3. linux下的几种进程间通信方式的特点
  4. Not so Mobile(二叉树递归输入同时建树){天平}
  5. 2017西安交大ACM小学期 文本查找[AC自动机]
  6. leetcode 102 C++AC
  7. php在线读取pdf文件大小_PDF转WORD在线转换器哪家强?
  8. Aprior算法简化算法——FP-Tree思想与实现
  9. qt中tinyxml2的基本使用方法
  10. html网页主题结构,常用html元素总结包括基本结构、文档类型、头部、主体等等...
  11. cuda out of memory gpu还有空间_《室内设计》光与空间的无缝衔接
  12. Mysql 删除数据表的三种方式详解
  13. 平衡小车从原理到实践
  14. Mac QuickTime+Soundflower录屏
  15. memory allocator php,LNMP的安装
  16. a1708硬盘转接口_macbook pro2017 a1708转接卡更换大容量硬盘,Apple/苹果笔记本电脑_好文分享_优购 - 荐优,购适...
  17. 用python批量下载网络图片_使用python批量下载图片吗?怎么做?
  18. 设计模式是什么鬼3(原型)
  19. mpu和嵌入式linux区别,嵌入式MCU与MPU的区分和MCU开发中的三个误区
  20. 【图像分割】ExG超绿特征灰度化、二值化分割(Matlab及Python代码实现)

热门文章

  1. perl linux 独立运行,Perl脚本打包为独立执行程序
  2. XBMC源代码分析 4:视频播放器(dvdplayer)-解码器(以ffmpeg为例)
  3. java jhap_Java-Live与JVAP工具的Max
  4. 12v电源正负极区分_UPS不间断电源的安装、配电计算及相关故障处理方法!
  5. 【软考】程序设计语言复习指南
  6. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(热身赛)
  7. 证券计算机行业研究,20210630-首创证券-计算机行业深度报告:物联网,研究框架.pdf...
  8. 第八章节 文件操作一 (文件夹常用操作)
  9. linux 汇编 读取软盘,读取软盘逻辑扇区的汇编实现代码
  10. hdu 3333 Turing Tree 求区间内不同数的和——线段树解法