和朴素的素数筛法一样,flag数组,记录x是否为素数

flag[x]=0,x为合数

falg[x]=1,x为素数

flag[1],无定义

其核心思想是,用x筛除与之差异最小的y,达到时间上O(n)的目的

何为差异最小,呢?

基于唯一分解定理,我们认为,x的素数分解集合(是可重集)

大小记为|x|,如果|x|+1=|y|,我们则认为x,y差异最小

即此时用x筛去y

更重要的一点:

if(i%p[j]==)break;

什么意思呢?

可以这样理解,此时的break是为了下一次筛(暂时的失败是为了下一次更好的成功)

应为,能被i筛去的,一定能被p[j]筛去,p[j]后面的下一次反正会用到

所以让p[j]和它后面的素数去筛就好了

举一个栗子:

用2,3我们可以筛去4,6,9

像这样:

1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17

a[0  0  0  1  0  1  0  0  1  0   0   0   0   0   0   0   0 ]

但是

4,只会筛去8,而没有12

因为,12是留给6筛的,所以代码就很简单了

 typedef long long ll;
const int MAXP=+;
ll p[MAXP],flag[MAXP],cnt;
void prime(int n){
for(int i=;i<=n;i++){
if(!flag[i])p[++cnt]=i;
for(int j=;j<=cnt && i*p[j]<=n;j++){
flag[i*p[j]]=;
if(i%p[j]==)break;
}
}
}
int main(){
prime();
for(int i=;i<=cnt;i++)printf("p[%d]=%lld\n",i,p[i]);
return ;
}

prime(100)

线性筛-prime,强大O(n)的更多相关文章

  1. 线性筛prime/phi/miu/求逆元模板

    这绿题贼水...... 原理我不讲了,随便拿张草稿纸推一下就明白了. #include <cstdio> using namespace std; ; int su[N],ans,top; ...

  2. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  3. POJ 3126 - Prime Path - [线性筛+BFS]

    题目链接:http://poj.org/problem?id=3126 题意: 给定两个四位素数 $a,b$,要求把 $a$ 变换到 $b$.变换的过程每次只能改动一个数,要保证每次变换出来的数都是一 ...

  4. SPOJ PRIME1 - Prime Generator(线性筛)

    Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate ...

  5. 线性筛-euler,强大O(n)

    欧拉函数是少于或等于n的数中与n互质的数的数目 φ(1)=1(定义) 类似与莫比乌斯函数,基于欧拉函数的积性 φ(xy)=φ(x)φ(y) 由唯一分解定理展开显然,得证 精髓在于对于积性的应用: ){ ...

  6. 线性筛-mobius,强大O(n)

    首先,你要知道什么是莫比乌斯函数 然后,你要知道什么是积性函数 最后,你最好知道什么是线性筛 莫比乌斯反演 积性函数 线性筛,见上一篇 知道了,就可以愉快的写mobius函数了 由定义: μ(n)= ...

  7. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  8. 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 726  Solved: 309[Submit][Status ...

  9. 洛谷P3383 【模板】线性筛素数

    P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 Too many or Too few lines 样例解释有问题 ...

随机推荐

  1. 论文阅读笔记(五)【CVPR2012】:Large Scale Metric Learning from Equivalence Constraints

    由于在读文献期间多次遇见KISSME,都引自这篇CVPR,所以详细学习一下. Introduction 度量学习在机器学习领域有很大作用,其中一类是马氏度量学习(Mahalanobis metric ...

  2. 国内下载Git的连接地址

    Git国内下载: https://github.com/waylau/git-for-win  

  3. C++——动态内存分配3

    动态创建多维数组  new 类型名T[下标表达式1][下标表达式2]…: 如果内存申请成功,new运算返回一个指向新分配内存首地址的指针,是一个T类型的数组,数组元素的个数为除最左边一维外各维下标表达 ...

  4. 2020牛客寒假算法基础集训营5 B.牛牛战队的比赛地 (二分/三分)

    https://ac.nowcoder.com/acm/contest/3006/B 三分做法 #include<bits/stdc++.h> #define inf 0x3f3f3f3f ...

  5. Java 13 新特性

    一.core-libs/java.nio 添加 FileSystems.newFileSystem(Path, Map<String, ?>) 方法 java.nio.file.FileS ...

  6. docker部署java应用程序

    https://docs.docker.com/get-started/ 安装docker   1.安装docker  apt install docker 2.配置docker加速器 安装完成后在 ...

  7. EasyExcel实现导入excel

    https://blog.csdn.net/rexueqingchun/article/details/91870372 1.pom.xml配置依赖包 <!-- xls格式excel依赖包 -- ...

  8. TD - setAttribute()

    添加指定的属性,并为其赋指定的值 this.sltLevelType.setAttribute("height", "100px");

  9. python面试的100题(7)

    8.将字符串 "k:1 |k1:2|k2:3|k3:4",处理成字典 {k:1,k1:2,...} str1 = "k:1|k1:2|k2:3|k3:4" de ...

  10. 部署web应用程序到tomcat

    昨天将一个web项目部署到本地的tomcat,历程很艰辛,各种报错.首先这个项目可以用eclipse内嵌的jetty启动起来,试着用tomcat容器,各种报错.以下是详细步骤: 1.用eclipse打 ...