Day 2:数论——[筛法、 g c d gcd gcd、 l c m lcm lcm 和裴蜀定理]
一、筛法
注:
1.我们用 ps_is_prime 数组来表示暴力筛的 b o o l bool bool 类型判断素数数组( 0 0 0 表示是质数, 1 1 1 表示不是质数)。
2.我们用 ai_is_prime 数组来表示埃氏筛的 b o o l bool bool 类型判断素数数组。
2.我们用 ou_is_prime 数组来表示欧拉筛的 b o o l bool bool 类型判断素数数组,prime 来表示欧拉筛的素数表,cnt 来表示 prime 数组的长度。
1.暴力筛( V i o l e n c e Violence Violence s c r e e n i n g screening screening m e t h o d method method)
① ① ① 原理
C a s e Case Case 1 1 1 初始化:一个常识: 1 1 1 肯定不是质数,那么 ps_is_prime[1] 便置为 1 1 1 。
C a s e Case Case 2 2 2 筛数过程:先用 i i i 枚举 2 − n 2 - n 2−n 中的每一个数,再用 j j j 从 2 2 2 开始枚举,将 i i i 的所有不超过 n n n 的倍数在 ps_is_prime 中标记为 1 1 1。
C a s e Case Case 3 3 3 小优化:由于每个数的因数都成对出现,所以只需要枚举到 n \sqrt n n 即可。
② ② ② 具体例子举例
例如:筛 20 20 20 以内的质数。
首先,将 1 1 1 表示不是质数,预先算出 n = 4 \sqrt n = 4 n=4
1 − n 1 - n 1−n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ps_is_prime | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
第一次循环, i = 2 i = 2 i=2
1 − n 1 - n 1< |
---|