首页 > 其他分享 >质数筛选

质数筛选

时间:2023-08-20 22:12:37浏览次数:130  
标签:Prime NotPrime 筛法 int 质数 筛选 Eratosthenes


欧拉筛:

欧拉(Euler)筛法是用于找到从1 11开始,到给定的最大数之间的所有质数的一种筛法,其时间复杂度是O ( n ) O(n)O(n)。其中欧拉筛法有效地避免了埃拉托斯特尼(Eratosthenes)筛法中重复的筛选,保证了每个数只筛选一次,成功地降低了时间复杂度。

一、埃拉托斯特尼(Eratosthenes)筛法
埃拉托斯特尼(Eratosthenes)筛法是要得到自然数n nn以内的全部质数,必须把不大于n \sqrt{n}
n

的所有质数的倍数剔除,剩下的就是质数。

这是因为如果是n nn合数,那么它一定有一个不大于n \sqrt{n}
n

的质因子,所以过了n \sqrt{n}
n

就不用再更新了。

具体算法为:​

遍历,将质数记录在数组中;

如果是质数的话,将所有这个数的倍数记录为合数;

对 到 进行遍历,是质数就加入数组中。

代码:

 1 const int MAXN = 10000;
 2  
 3 int cnt; //记录总共有多少个质数
 4 int Prime[MAXN]; //记录所有质数
 5 int NotPrime[MAXN]; //打标记
 6  
 7 void Eratosthenes_Prime(int n)
 8 {
 9     cnt = 0;
10     memset(Prime, 0, sizeof(Prime));
11     memset(NotPrime, 0, sizeof(NotPrime));
12     for (int i = 2; i <= (int)sqrt(n + 0.5); ++i)
13     {
14         /*如果是质数,则记录下来*/
15         if (!NotPrime[i])
16             Prime[cnt++] = i;
17         
18         /*将后面质数i的倍数都记录成合数*/
19         for (int j = 2; i * j <= n; ++j)
20             NotPrime[i * j] = 1;
21     }
22     
23     /*后面的用前面的质数已经筛完,直接记录*/
24     for (int i = (int)sqrt(n + 0.5) + 1; i <= n; ++i)
25         if (!NotPrime[i])
26             Prime[cnt++] = i;
27 }

 

标签:Prime,NotPrime,筛法,int,质数,筛选,Eratosthenes
From: https://www.cnblogs.com/jacy1234/p/17644717.html

相关文章

  • AcWing 866. 试除法判定质数
    题目给定$n$个正整数$a_i$,判定每个数是否是质数。输入格式第一行包含整数$n$。接下来$n$行,每行包含一个正整数$a_i$。输出格式共$n$行,其中第$i$行输出第$i$个正整数$a_i$是否为质数,是则输出Yes,否则输出No。数据范围$1≤n≤100,1≤a_i≤2^{31}−1$......
  • 质数总结
    试除法判质数算法思想由于算法比较简单,就不再从朴素一步步进行优化了,直接写最终版本一个数n的约数都是成对存在的,且一个位于$\sqrt[2]{n}$前面,一个位于后面。所以只需要判断从2到$\sqrt[2]{n}$的数是不是约数即可代码实现/***线性筛(欧拉筛)核心:一个数只会被它的最小质......
  • 【学习笔记】简单数论-质数
    质数的个数是无限的。试除法:若一个正整数\(N\)为合数,则存在一个能整除\(N\)的数\(T\),其中\(2\leT\le\sqrt{N}\)。时间复杂度为\(O(\sqrt{N})\)。代码实现boolisprime(intn){ if(n<2) returnfalse; for(inti=2;i<=sqrt(n);i++) if(n......
  • js筛选数组排除多个多个不符合项
    constarr=[{label:'2',value:'2'},{label:'1',value:'1'},{label:'3',value:'3'}]//把value=1和value=2的数据筛掉letnewArr=arr.filter(opt=>......
  • vue2公共组件=》筛选条件
    源码<template><divclass="c__filter":style="`height:${showFilter?'auto':'47px'}`"v-if="filterNum>0"ref="tableFilter"><divclass="c_filte......
  • Python 关于字典嵌套字典通过正则筛选关键字
    1、@classmethoddefget_dict_value(cls,in_dict,target_key,results=[],not_d=True):"""in_dict:字典嵌套字典内容target_key:需要筛选的valueresults:筛选后返回列表data_list:通过正则筛选需要的内容,return......
  • 记录一个解决方法- 使用editableProTable表头筛选,无法重置,位置偏移
    问题如图:切换原始告警和收敛告警以后,由于二者用到同一个table,切换之后再点击筛选条件,则筛选框的位置发生偏移解决办法:给table一个key属性,改变table中的数据或者列时,去改变这个唯一的key,key值改变,table就可以重新渲染了!......
  • IIS 请求筛选模块被配置为拒绝包含双重转义序列的请求。
    方法1:web.config内容如下:<?xmlversion="1.0"encoding="UTF-8"?><configuration><system.webServer><security><requestFilteringallowDoubleEscaping="true"/></security></system.webServer&g......
  • AppleScript成功实现FaceTime语音,FaceTime视频,FaceTime数据筛选,检测手机号是否开通
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署苹......
  • 【专题】质数筛
    质数筛Q:给定自然数n,求[1,n]区间内的所有质数。1、原始筛法(时间复杂度:O(n√n))算法思路:不加思考的暴力枚举,即逐个判断区间内每个数是否是质数。判断单个质数的时间复杂度为 O(√n),判断1~n是否是质数的时间复杂度为 O(n√n)。代码展示:inttot,prime[N];/*prime......