数论收获
作者:
1234abcd
,
2023-02-03 16:13:58
,
所有人可见
,
阅读 257
1. 1 ~ n 内有 n / ln(n) 个质数
2. 1e6 范围内约数最多的数是 720720, 有 240 个约数。 int 范围内约数最多的数的约数个数是 1600 个
3. 每个数最多有一个大于其平方根的质因数,且这个质因数分解时次数为 1
4. 如果考虑约数时间复杂度太高,不妨考虑一下倍数
5. x = a * b * c * … * z。可以把每个数 (a ~ z) 分解质因数,然后合并。这是对 x 分解质因数的一种方法
6. x 中 d 的倍数有 x / d 个
7.
(a - b) % c == (a % c - b % c + c) % c
(a * b) % c == (a % c) * (b % c) % c
(a - k * b) % c == (a % c - (k%c) * (b%c) % c + c) % c
8.如果一个数的奇数位的和与偶数位的和的差的绝对值能被 11 整除,则这个数能被 11 整除(说明这个数不是
质数)
个位为第一位,然后往左依次为第二位,第三位 …
9.O(n) 时间内求出 1 ~ n 的每个数的最小质因子:
void get_primes(int n)
{
for (int i = 2; i <= n; i ++ )
{
if (!st[i])
{
minp[i] = i;
primes[cnt ++ ] = i;
}
for (int j = 0; primes[j] * i <= n; j ++ )
{
int t = primes[j] * i;
st[t] = true;
minp[t] = primes[j];
if (i % primes[j] == 0) break;
}
}
}
minp[i] 为 i 的最小质因子, 但是不知道这里统一 1 没有
10.多重集合排列数:
(a1 + a2 + … + an)! / (a1 ! * a2 ! * … * an !)