初等数论中的基础概念

发布时间 2023-11-28 09:39:55作者: 陆留生信奥艺术

整除

设 有整数 a,ba 不等于 0。

如果存在整数 q,使得 b=aq,那么就说 b 可被 a 整除,记作 a∣bb 不被 a 整除记作 a∤b

比如 3∣9的意思是 3能整除 9 , 而 3∤10是3不能整除 10

? 给定两个正整数a,b(0<a,b<105), 判断 a 能否整除 b。

cpp
if (b % a == 0) {
    printf("a 能整除 b");
} else {
	printf("a 不能整除 b");
}

取模和取余

C/C++中的运算符 % 其实是取余运算,只是习惯上读作取模。

取余(rem),遵循尽可能让商向0靠近的原则

取模(mod),遵循尽可能让商向负无穷靠近的原则

符号相同时,两者不会冲突。

比如,7 ÷ 3 = 2.3,产生了两个商2和3。

7 =3 * 2 + 1 或 7 = 3 * 3 + (-2)。

因此,7 rem 3 = 1,7 mod 3= 1。

符号不同时,两者会产生冲突。

比如,7 ÷ (-3) = -2.3, 产生了两个商 -2 和 -3。

7=(-3) * (-2) + 1 或 7 = (-3) * (-3) + (-2)。

因此,7 rem (-3) = 1, 7 mod (-3) = (-2).

约数(因数)

约数(因数):若 a∣b,则称 b 是 a 的倍数,a 是 b 的约数(因数)。

? 给定一个正整数 x(0<x<105), 从小到达输出 x 的所有约数(因数)。

cpp
for (int i = 1; i <= x; i++) {
	if ( x % i == 0) {
		printf("%d ", i);
	}
}

质数与合数

设整数 p>1。如果 p 除了1和它自身外没有其他约数,那么称 p 为质数(或素数)。

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

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

质数与合数的简单性质:

  • 大于 1 的整数 a 是合数,等价于 a 可以表示为整数 d 和 e(1<d,e<a)的乘积。
  • 大于 1 的整数 a 一定可以表示为质数的乘积。
  • 对于合数 a,一定存在素数 p≤sqrt(a)  使得 p∣a
  • 质数有无穷多个。

? 给定一个正整数 x(0<x<108)x(0<x<108), 判断其是否为质数。

cpp
// 函数返回值 0 为合数,1为质数
bool isPrime(int x) {
	for (int i = 2; i * i <= x; i++) {
		if ( x % i == 0) {
			return 0;
		}
	}
	return 1;
}

互质(互素)

两个整数互素的定义:若 gcd⁡(a1,a2)=1,则称 a1 和 a2互素。

多个整数互素的定义:若 gcd⁡(a1,…,ak)=1,则称 a1,…,ak 互素。

多个整数互素,不一定两两互素。例如 610 和 15 互素,但是任意两个都不互素。