约数和倍数的性质

约数(Divisors)

约数是指能整除某个整数的其他整数。例如,对于整数 ( a ),如果存在整数 ( b ) 使得 ( a = b*c ),那么 ( b ) 就是 ( a ) 的约数。

性质:

  1. 1 和自身是每个整数的约数: 每个整数 ( a ) 都有至少两个约数:1 和 ( a ) 本身。
  2. 约数的范围: 如果 ( d ) 是 ( n ) 的一个约数,则 ( d <=sqrt(n))。这意味着寻找 ( n ) 的约数时,只需要在 1 到 sqrt(n)范围内搜索。
  3. 完全平方数的约数个数为奇数: 如果 ( n ) 是一个完全平方数,那么它的约数个数一定是奇数,因为完全平方数的平方根只有一个。

倍数(Multiples)

倍数是指某个整数的整数倍数。如果 ( a ) 是 ( b ) 的倍数,则存在整数 ( c ) 使得 ( a = b \times c )。

性质:

  1. 倍数的性质: 如果 ( b ) 是 ( a ) 的倍数,那么 ( a ) 也是 ( b ) 的约数。
  2. 倍数之间的关系: 如果 ( a ) 是 ( b ) 的倍数,那么 ( ka )(其中 ( k ) 是任意整数)也是 ( b ) 的倍数。
  3. 最小公倍数(LCM): 如果 ( a ) 和 ( b ) 是两个整数,则 LCM(a,b) 是同时是 ( a ) 和 ( b ) 的倍数的最小正整数。

示例和应用:

  • 如果 ( a = 12 ),它的约数包括 ( 1, 2, 3, 4, 6, 12 )。
  • 如果 ( b = 5 ),它的倍数包括 ( 5, 10, 15, 20,......)。

在数学和计算机科学中,理解和应用约数和倍数的性质对于解决整数分解、公约数和公倍数、最大公约数(GCD)、最小公倍数(LCM)等问题非常重要。

以下是找出n的所有约数的C++代码示例:

cpp 复制代码
int find_divisors(int n, int a[])
{
	//作为数组下标的索引
	int index = 0;
	//不写成k*k<=n是因为k比较大时会超出long long的数据范围
	for (int k = 1; k <= n / k; k++) {
		if (n % k == 0) {
			a[index++] = k;
			//约数成对出现,但是要注意一下k=n/k可能会重复出现。(防止完全平方数的同一个约数重复出现)
			if (n / k != k) a[index++] = n / k;
		}
	}
	return index;
}