约数(Divisors)
约数是指能整除某个整数的其他整数。例如,对于整数 ( a ),如果存在整数 ( b ) 使得 ( a = b*c ),那么 ( b ) 就是 ( a ) 的约数。
性质:
- 1 和自身是每个整数的约数: 每个整数 ( a ) 都有至少两个约数:1 和 ( a ) 本身。
- 约数的范围: 如果 ( d ) 是 ( n ) 的一个约数,则 ( d <=sqrt(n))。这意味着寻找 ( n ) 的约数时,只需要在 1 到 sqrt(n)范围内搜索。
- 完全平方数的约数个数为奇数: 如果 ( n ) 是一个完全平方数,那么它的约数个数一定是奇数,因为完全平方数的平方根只有一个。
倍数(Multiples)
倍数是指某个整数的整数倍数。如果 ( a ) 是 ( b ) 的倍数,则存在整数 ( c ) 使得 ( a = b \times c )。
性质:
- 倍数的性质: 如果 ( b ) 是 ( a ) 的倍数,那么 ( a ) 也是 ( b ) 的约数。
- 倍数之间的关系: 如果 ( a ) 是 ( b ) 的倍数,那么 ( ka )(其中 ( k ) 是任意整数)也是 ( b ) 的倍数。
- 最小公倍数(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++代码示例:
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;
}