今天我们讲了一大堆数论的东西,目前本人稍微掌握一些的便是素数筛法,下面为了保护着珍贵的遗产,我决定写一篇博客来记录一下, 谈到素数筛法,相信大家岁熟悉的是暴力筛,我们大家只需要把数n的前1到sqrt(n)中所有的质数拿来和这个数n除一下看一下能否整除,如果能够整除,说明这个n是素数,然后就依次这样判 ...
分类:
其他好文 时间:
2020-07-17 16:15:49
阅读次数:
51
首先看一看判断素数的方法,就是看一个数n能否被2~n-1内的数整除,如果能整除就不是素数,反之则是,直接上优化后的代码: 1 bool isprime(int x) 2 { 3 for(int i=2;i<=sqrt(x);i++) 4 { 5 if(x%i==0) 6 return false; ...
分类:
其他好文 时间:
2020-04-13 18:17:05
阅读次数:
79
素数筛法一直是我前期学习的难题,现在把它总结一下,防止忘记。 ① 普通筛法 O(n√n) 根据定义,一个合数n一定可以由两个数相乘得到,这两个因数一个大于√n,另一个小于√n,所以可以对因数从2到√n进行枚举,判断是否可以被n整除,如无法整除,则为素数。 ② 埃氏筛法 O(n㏒n) 如果一个数是素数 ...
分类:
其他好文 时间:
2020-03-02 18:49:59
阅读次数:
75
题面 "传送门" 题目描述 输入格式 输出格式 输入输出样例 说明/提示 时空限制:500ms 128M 数据规模: 对于30%的数据:N(模板题不都是这样吗,你个大菜鸡(自言自语. ) 这题还可以用别的更优的素数筛法,比如 之类的,之后我会考虑写一篇文章具体总结一下。 但是这篇题解我们只考虑欧拉筛 ...
分类:
其他好文 时间:
2020-02-15 19:13:07
阅读次数:
86
埃氏筛法:从1到n遍历一遍,每找到一个素数就记录下来并把它的倍数全部筛掉。 时间复杂度:O(nlog(log (n)) ) code: #include <iostream> #include <string> #include <cstdio> #include <algorithm> #incl ...
分类:
其他好文 时间:
2020-01-17 10:04:06
阅读次数:
79
埃氏筛法: 对于每一个小于n的非负整数p,删去2p,3p,4p......,当处理完所有数后,还没有删除的就是素数. 想法:用a记录素数表,a[i]=1表示不是素数,a[i]=0表示是素数. 注意:1不是素数,需要特判! ...
分类:
其他好文 时间:
2019-10-20 16:28:13
阅读次数:
88
素数筛法 如果我们想要知道小于等于 $n$ 有多少个素数呢? 一个自然的想法是我们对于小于等于 $n$ 的每个数进行一次判定。这种暴力的做法显然不能达到最优复杂度,考虑如何优化。 考虑这样一件事情:如果 是合数,那么 的倍数也一定是合数。利用这个结论,我们可以避免很多次不必要的检测。 如果我们从小到 ...
分类:
其他好文 时间:
2019-10-15 19:30:33
阅读次数:
136
(好 快 ) 素数是什么就不用介绍了吧。。。先介绍判断素数的方法 判断素数 先看朴素算法: (真的好朴素。。) 用时O(n) (肯定不行啊,吃枣药丸的。。) 怎么优化呢? 不难发现,如果a是n的约数,那么n/a也是n的约数 所以就有以下代码: 这个用时O(n^0.5) 一般使用的话这样其实差不多了。 ...
分类:
其他好文 时间:
2019-09-25 15:45:30
阅读次数:
84
参考博客: https://www.cnblogs.com/Duahanlang/p/3212323.html 1.遇见素数时将该素数的倍数都筛掉 //缺陷是会重复筛选有不同素数因子的合数 如 10=2*5 ,将被筛两次 2.线性筛法 当i遍历到为前面已经存储的素数的倍数时跳出循坏 3.进一步优化 ...
分类:
其他好文 时间:
2019-08-13 15:29:57
阅读次数:
74
介绍 Eratosthenes筛法,又名埃氏筛法,对于求1~n区间内的素数,时间复杂度为n log n,对于10^6^ 以内的数比较合适,再超出此范围的就不建议用该方法了。 筛法的思想特别简单: 对于不超过n的每个非负整数p, 删除2p, 3p, 4p,…, 当处理完所有数之后, 还没有被删除的就是 ...
分类:
其他好文 时间:
2019-08-12 23:40:48
阅读次数:
99