朴素版筛选质数 时间复杂度O(nlogn) int primes[N], cnt; // primes[]存储所有素数 bool st[N]; // st[x]存储x是否被筛掉 void get_primes(int n) { for (int i = 2; i <= n; i ++ ) { if ...
欧拉筛求素数模版 public class Prime { //欧拉筛的时间复杂度O(n),每个数只筛一次,使用最小的质因子去筛 [埃氏筛法有重复筛同一个数,时间复杂度为O(n*log(log(n)))] public static boolean[] visit; //true代表不是素数,fal ...
分类:
其他好文 时间:
2020-04-30 13:54:50
阅读次数:
72
埃氏筛法 先将2到n范围内的整数列出来,其中2是最小的素数。 将表中所有的2的倍数划去,表中剩下的最小的数字就是3,他不能被更小的数整除,所以3是素数。 再将表中所有的3的倍数划去……以此类推; 如果表中剩余的最小的数是m,那么m就是素数。 然后将表中所有m的倍数划去,像这样反复操作,就能依次枚举n ...
分类:
其他好文 时间:
2020-03-02 19:05:47
阅读次数:
58
素数筛法一直是我前期学习的难题,现在把它总结一下,防止忘记。 ① 普通筛法 O(n√n) 根据定义,一个合数n一定可以由两个数相乘得到,这两个因数一个大于√n,另一个小于√n,所以可以对因数从2到√n进行枚举,判断是否可以被n整除,如无法整除,则为素数。 ② 埃氏筛法 O(n㏒n) 如果一个数是素数 ...
分类:
其他好文 时间:
2020-03-02 18:49:59
阅读次数:
75
区间筛法 对$[2,\sqrt{b}]$进行埃氏筛法的同时对区间$[a,b]$进行筛选 ...
分类:
其他好文 时间:
2020-01-28 19:07:24
阅读次数:
111
埃氏筛法 复杂度:$O(nlog(log(n)))$ 模板: ...
分类:
其他好文 时间:
2020-01-28 12:13:21
阅读次数:
61
因为最大可以达到int极限 明显直接筛选不可能完成 所以从其因子入手 因为任何不是素数的数都有除了1与其自身之外的因子 因此,我们筛出2^(31/2)≈46350之内的所有素数,以其作为因子再将题目给定区间内的所有不是素数的数标记排除 然后将素数存放在prnum这个vector集合中便于调用 在排除 ...
分类:
其他好文 时间:
2020-01-26 10:26:11
阅读次数:
75
埃氏筛法:从1到n遍历一遍,每找到一个素数就记录下来并把它的倍数全部筛掉。 时间复杂度:O(nlog(log (n)) ) code: #include <iostream> #include <string> #include <cstdio> #include <algorithm> #incl ...
分类:
其他好文 时间:
2020-01-17 10:04:06
阅读次数:
79
埃拉托斯特尼筛法可以在 O(nloglogn)的复杂度内筛出素数,但事实上欧拉筛(线性筛)可以达到O(n)的线性效率! 先来看欧拉筛的算法及实现,然后再思考埃氏筛法时间都多在哪了。 欧拉筛算法步骤: 1.如果上界小于2,没有素数,返回。 2.标记i=2为第一个素数。然后如果没有到达上界,转移到步骤3 ...
分类:
其他好文 时间:
2019-12-31 10:48:10
阅读次数:
195
min25筛,可以用来求积性函数前缀和。 这个函数要求,$f(p^x)$能表示为关于$p^x$的一个多项式。 算法分两步: 1.求出所有质数的f和。 方法如下: 首先,把所有数当成质数代入多项式,求出一个“假的”前缀和。 然后,通过埃氏筛法,将非质数除去。 每次,当筛质数$P_x$时,将最小质因数大 ...
分类:
其他好文 时间:
2019-12-13 23:48:53
阅读次数:
110