「简单数论」初赛考察的数学知识

在最新的CSP-J大纲中,简单数论主要考察整除、因数、倍数、指数、质 (素) 数、合数等内容。

大家好,我是李。

这里我将带着大家一起复习初赛中考察的数学知识之数论。

一、整除

整除的定义

设a,b∈Z,a≠0。如果∃q∈Z,使得b = aq,那么就说b可被a整除,记作 a|b;不被a整除记作。

整除的性质如下图所示👇

约数(因数)

若a|b,则称b是a的倍数,a是b的约数。

0是所有非0整数的倍数。对于整数b≠0,b的约数只有有限个。

二、余数

设a,b为两个给定的整数,a≠0。设d是一个给定的整数。那么,一定存在唯一的一对整数q和r,满足b=qa+r,d≤r<|a|+d

无论整数d取何值,r统称为余数。a|b等价于a|r

一般情况下,d取0,此时等式b=qa+r,0≤r<|a|称为带余数除法(带余除法)。这里的余数r称为最小非负余数。

余数往往还有两种常见取法

**绝对最小余数:**d取 a的绝对值的一半的相反数。即:

**最小正余数:**d取1。即b=qa+r,1≤r<|a|+1

带余数除法的余数只有最小非负余数。如果没有特别说明,余数总是指最小非负余数。

余数的性质

任一整数被正整数a除后,余数一定是且仅是0到(a-1)这a个数中的一个。

相邻的a个整数被正整数a除后,恰好取到上述a个余数。特别地,一定有且仅有一个数被a整除。

三、素数与合数

设整数p≠0,±1。如果p除了平凡约数外没有其他约数,那么称p为素数(不可约数)。

若整数a≠0且a不是素数,则称a为合数。

p和-p总是同为素数或者同为合数。如果没有特别说明,素数总是指正的素数

整数的因数是素数,则该素数称为该整数的素因数(素约数)。

素数与合数的简单性质

  • 大于1的整数a是合数,等价于a可以表示为整数d和e(1<d,e<a)的乘积。
  • 如果素数p有大于1的约数d,那么d=p。
  • 大于1的整数a一定可以表示为素数的乘积。
  • 对于合数a,一定存在素数p≤√a使得p|a。
  • 素数有无穷多个。
  • 所有大于3的素数都可以表示为6n±1的形式。

四、最大公约数和最小公倍数

最大公约数(gcd)

最大公约数定义:最大公约数即为Greatest Common Divisor,常缩写为gcd。

一组整数的公约数,是指同时是这组数中每一个数的约数的数。 是任意一组整数的公约数。一组整数的最大公约数,是指所有公约数里面最大的一个。

性质
  • 对于任意几个数,这几个数同时成倍放大,他们的最大公约数也放大相同倍数。例如:(3,6)他们的最大公约数是3,如果放大3倍,即(9,18)= 9,即他们的最大公约数也放大了3倍
  • 对于任意整数x,(a1,a2)=(a1,a2+a1*x),即一个整数加上另一个整数的任意倍数,他们的最大公约数不变。例如9和24,(9,24)=(9,24-9)=(9,15)=(9,15-9)=(9,6)=(9-6,6)=(3,6)=(3,6-3)=(3,3)=(3-3,3)=(0,3)=3注:(a,0) = (0,a) = a
  • 计算多元最大公约数,比如(12,18,21),先求出(12,18)=6,再把6带入,求出(6,21)=3,可以将这种算法称为最大公约数的结合律
辗转相除法(欧几里得算法)

如果我们已知两个数a和b,如何求出二者的最大公约数呢?

不妨设 a>b,我们发现如果b是a的约数,那么b就是二者的最大公约数。下面讨论不能整除的情况,即a=b*q+r,其中r<b
我们通过证明(常规课已经通过推论证明)可以得到gcd(a,b)=gcd(b,a mod b),代码实现如下:

int gcd(int a, int b) {
  while (b != 0) {
    int tmp = a;
    a = b;
    b = tmp % b;
  }
  return a;
}

如果两个数a和b满足gcd(a,b)=1,我们称a和b互质。

最小公倍数(LCM)

最小公倍数定义:一组整数的公倍数,是指同时是这组数中每一个数的倍数的数。0 是任意一组整数的公倍数。一组整数的最小公倍数,是指所有正的公倍数里面,最小的一个数。

性质
  • 对于任意几个数,这几个数同时成倍放大,他们的最小公倍数也放大相同倍数。例如:[3,9]他们的最小公倍数是9,如果放大3倍,即[9,27]= 27,即他们的最小公倍数也放大了3倍。
  • 计算多元最小公倍数,比如[3,6,9],先求出[3,6]=6,再把6带入,求出[6,9]=18,可以将这种算法称为最小公倍数的结合律
  • 最大公约数*最小公倍数 = 原来两个数的乘积,比如(16,10)*[16,10] = 80*2 = 160 = 16*10

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigbigli_大李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值