线性筛-prime,强大O(n)
和朴素的素数筛法一样,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)的更多相关文章
- 线性筛prime/phi/miu/求逆元模板
这绿题贼水...... 原理我不讲了,随便拿张草稿纸推一下就明白了. #include <cstdio> using namespace std; ; int su[N],ans,top; ...
- P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)
技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...
- POJ 3126 - Prime Path - [线性筛+BFS]
题目链接:http://poj.org/problem?id=3126 题意: 给定两个四位素数 $a,b$,要求把 $a$ 变换到 $b$.变换的过程每次只能改动一个数,要保证每次变换出来的数都是一 ...
- SPOJ PRIME1 - Prime Generator(线性筛)
Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate ...
- 线性筛-euler,强大O(n)
欧拉函数是少于或等于n的数中与n互质的数的数目 φ(1)=1(定义) 类似与莫比乌斯函数,基于欧拉函数的积性 φ(xy)=φ(x)φ(y) 由唯一分解定理展开显然,得证 精髓在于对于积性的应用: ){ ...
- 线性筛-mobius,强大O(n)
首先,你要知道什么是莫比乌斯函数 然后,你要知道什么是积性函数 最后,你最好知道什么是线性筛 莫比乌斯反演 积性函数 线性筛,见上一篇 知道了,就可以愉快的写mobius函数了 由定义: μ(n)= ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- 洛谷P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 Too many or Too few lines 样例解释有问题 ...
随机推荐
- 论文阅读笔记(五)【CVPR2012】:Large Scale Metric Learning from Equivalence Constraints
由于在读文献期间多次遇见KISSME,都引自这篇CVPR,所以详细学习一下. Introduction 度量学习在机器学习领域有很大作用,其中一类是马氏度量学习(Mahalanobis metric ...
- 国内下载Git的连接地址
Git国内下载: https://github.com/waylau/git-for-win
- C++——动态内存分配3
动态创建多维数组 new 类型名T[下标表达式1][下标表达式2]…: 如果内存申请成功,new运算返回一个指向新分配内存首地址的指针,是一个T类型的数组,数组元素的个数为除最左边一维外各维下标表达 ...
- 2020牛客寒假算法基础集训营5 B.牛牛战队的比赛地 (二分/三分)
https://ac.nowcoder.com/acm/contest/3006/B 三分做法 #include<bits/stdc++.h> #define inf 0x3f3f3f3f ...
- Java 13 新特性
一.core-libs/java.nio 添加 FileSystems.newFileSystem(Path, Map<String, ?>) 方法 java.nio.file.FileS ...
- docker部署java应用程序
https://docs.docker.com/get-started/ 安装docker 1.安装docker apt install docker 2.配置docker加速器 安装完成后在 ...
- EasyExcel实现导入excel
https://blog.csdn.net/rexueqingchun/article/details/91870372 1.pom.xml配置依赖包 <!-- xls格式excel依赖包 -- ...
- TD - setAttribute()
添加指定的属性,并为其赋指定的值 this.sltLevelType.setAttribute("height", "100px");
- 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 ...
- 部署web应用程序到tomcat
昨天将一个web项目部署到本地的tomcat,历程很艰辛,各种报错.首先这个项目可以用eclipse内嵌的jetty启动起来,试着用tomcat容器,各种报错.以下是详细步骤: 1.用eclipse打 ...