算法基础课|数学知识|约数
约数
试除法求约数
时间复杂度:O(sqrt(n))
约数也是成对出现,枚举每一对中较小的那一个,处理一下边界
1 | def solve(n): |
约数个数 & 约数的和
一个数N分解质因数,其约数个数为ans
比如 $2^5$的约数为($2^0,2^1,2^2,2^3,..,2^5)$一共六个
1 | for k,v in dic.items(): |
计算约数的和时,可以使用 t = (t * p + 1)
1 | for q, a in dic.items(): |
最大公约数
时间复杂度: O(logn)
最大公约数(GCD)可以使用欧几里得算法(辗转相除法)求得。该算法的基本思想是不断用较小的数除以较大的数,直到两个数中有一个是0为止。此时,另一个非零的数就是最大公约数。
- 性质一:如果d能够整除a,d能够整除b,那么d可以整除 a * x + b * y
- 性质二:a和b的最大公约数(a, b),等价于 (b, a mod b)