质因数判定(试除法)
一个数可质因子分解为两个数相乘,假设$d$为$n$的较小的那个质因子,则满足 $d \le \frac n d$,即$d \le \sqrt n$。因此用试除法枚举质因子时只需要枚举到根号n即可。
1 | bool prim(int n) { |
质因子分解(试除法)
一个合数可分解为若干个质数的乘积,在分解时不仅需要让因子的乘积为该合数,还需要保证它们是质数。
1 | int divide(int n) { |
质数筛选
判断1~n中质数的数量,区别与判断一个数是否是质数,需要将1~n范围内的所有质数求出来,因此可以利用之前已求得的质数对后面的数进行筛选,而不是挨个用试除法进行判断。
1 | int prime[N], cnt; |
快速幂
假设$k$为6,那么 $k$ 可按二进制分解为110
,进一步$a^k$可分解为
其实就是按k的二进制,其中二进制位为1的时候,就可以与答案乘起来,并且由于每一项是按平方增长的,因此下一项可以直接用上一项的求平方。
1 | int qmi(int a, int k) { |
未考虑溢出