问题:

求 $[L, R]$ 之间的素数表

解法:

一个合数 $n$ 的最小素因子不超过 $\sqrt{n}$。

先用埃氏筛法求出 $[1,\lfloor \sqrt{R} \rfloor]$ 上的素数表

再在 $[L, R]$ 上用埃氏筛法求素数

const int N(1e5);
bool isprime[N];
int prime[N];
void init(){memset(isprime, -1, sizeof(isprime));isprime[0]=isprime[1]=0;int np=0;for(int i=0; i<N; i++){if(isprime[i]){prime[np++]=i;for(int j=2*i; j<N; j+=i)isprime[j]=0;}}
}
typedef long long ll;
const int M(1e5);
bool ok[M];
int res[M];
int seive(ll l, ll r){    // l, r >=1memset(ok, -1, sizeof(ok));if(l==1) ok[0]=0;    //error-proneint k=sqrt(r);for(int i=0; prime[i]<=k; i++){ll j=(l+prime[i]-1)/prime*prime;j=max(j, (ll)2*prime[i]);for(; j<=r; j+=prime[i])ok[j-l]=0;}int np=0;for(int i=0; i<=r-l; i++)if(ok[i]) res[np++]=i+(ll)l;return np;
}

更新:

不必先把 $[2, \lfloor \sqrt{R} \rfloor]$ 上的素数存下来。更好的做法是先分别做好 $[2, \lfloor \sqrt{R} \rfloor]$ 和 $[L, R]$ 的表,然后从 $[2, \lfloor \sqrt{R} \rfloor]$ 的表中筛得素数的同时,也将其倍数从 $[L, R]$ 中划去。

const int N=1e6+5, M=sqrt(1e9);bool is_prime[N];
bool is_prime_small[M+1];void segment_seive(int l, int r){   // [l,r]int t=sqrt(r);for(int i=2; i<=t; i++)is_prime_small[i]=true;for(int i=0; i<=r-l; i++)is_prime[i]=true;for(int i=2; i<=t; i++)if(is_prime_small[i]){for(int j=2*i; j<=t; j+=i)is_prime_small[j]=false;for(int j=max(2, (l+i-1)/i)*i; j<=r; j+=i)is_prime[j-l]=false;}
}

转载于:https://www.cnblogs.com/Patt/p/4805212.html

埃氏筛法的一般写法(区间筛法)相关推荐

  1. java 埃氏筛法_筛法

    素数与最大公因子2021-02-12 17:32:04 素数 定义: 素数是大于 \(1\) 的正整数, 并且除了 \(1\) 和它本身外不能被其他正整数整除. 素数的数量: 不超过 \(N\) 的素 ...

  2. 素数的线性筛法java,埃氏筛 线性筛(欧拉筛) 算法解析

    埃氏晒 埃拉托斯特尼筛法,简称埃氏晒,是一种用来求自然数n以内的全部素数. 他的基本原理是,如果我们要获得小于n的所有素数,那就把不大于根号n的所有素数的倍数剔除. 埃氏晒的原理很容易理解,一个合数, ...

  3. 【算法分析与设计】埃氏筛素数算法

    文章目录 素数 埃氏筛 算法思想 时间复杂度 Java编程实现 算法优化 素数 素数也称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 最基本的质数:2, 3, 5, 7, ...

  4. 埃氏筛 线性筛(欧拉筛) 算法解析

    埃氏晒 埃拉托斯特尼筛法,简称埃氏晒,是一种用来求自然数n以内的全部素数. 他的基本原理是,如果我们要获得小于n的所有素数,那就把不大于根号n的所有素数的倍数剔除. 埃氏晒的原理很容易理解,一个合数, ...

  5. 素数筛法详解:埃氏筛和欧拉筛

    文章目录 摘要 埃式筛 欧拉筛 超级详细的基础算法和数据结构合集: https://blog.csdn.net/GD_ONE/article/details/104061907 摘要 本文主要介绍埃氏 ...

  6. 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)

    一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题). 二.埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法 ...

  7. 素数基本(埃氏筛法/线性筛法)

    一.检查n是否为素数 最简单思路:所有可能的因数全部试一遍. int gg(int n) {for(int i=2;i<n;i++){if((n%i)==0)return 0;//有因数就不是素 ...

  8. 进阶必备:素数筛法(欧拉,埃氏筛法)

    筛选素数其实有两种比较高效的算法可以提供选用,分别是:Eratosthenes筛选法与欧拉筛选法.但是欧拉算法的普适性比较高,所以这里就只介绍欧拉函数的算法. 筛选的范围较小的话,欧拉算法,数据较大, ...

  9. 素数计算之埃氏筛法、欧拉筛法

    埃氏筛法 int main() {const int maxNumber=200;int isPrime[maxNumber];int i;int x;for (i=0;i<maxNumber; ...

最新文章

  1. ssh项目实战----Spring计时器任务 Spring整合JavaMail(邮件发送)
  2. Java输出彩色字符
  3. [转载] 百科全说——栾加芹:你适合这些食物吗?(11-03-07)
  4. FarPoint Spread For .Net 4.0
  5. 使用计算机控制台方法,故障控制台使用方法
  6. 九、索引与执行计划、索引的分类
  7. mysql for macOS安装
  8. CF(427D-Match amp; Catch)后缀数组应用
  9. java文件上传判重姿势浅谈
  10. LM393实现简易PWM调压电路
  11. Amos中介效应检验
  12. virtualbox安装步骤
  13. 福利!H3CNE认证网络工程师GB0-191 考试试题库超详细解析-02。持续更新~~
  14. nginx 配置为play!的前端http服务器
  15. 2路继电器控制直流电机正反转问题
  16. c语言综合合计实验报告,C语言设计实验报告(第一次)
  17. 前端模型--css动画(旋转八音盒)
  18. java 文件拷贝保留原来的属性_Java常用属性拷贝工具类使用总结
  19. codeforces 1326 E.Bombs
  20. 把全角数字(及字母)转换成半角数字

热门文章

  1. 【音视频安卓开发 (五)】Android中获取音视频原始数据的方法
  2. C 的 3种内存顺序,你都知道吗?
  3. 巧解C语言运算符的优先级和结合性
  4. go odroid_小众奇葩!Odroid Go Super简评
  5. go环境搭建_学习的golang第一步,搭建我们运行的环境,go! go! go
  6. hadoop源码分析_Spark2.x精通:Job触发流程源码深度剖析(一)
  7. 手机usb共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?小编教你共享方法...
  8. C++11新特性之智能指针
  9. 串口服务器的通讯模式
  10. 视频监控中的光端机是干什么用的?