筛选n之内的所有素数void Prime(int n){ //素数 memset(isPrime,1,sizeof(isPrime)); int m=sqrt(n+0.5); for(int i=2;i<=m;i++){
原创 2021-12-14 16:20:02
86阅读
关于线性 线性是指O(n)内掉所有合数,还有一种方法叫埃氏,我先证明埃氏效率低,也就是会有重复。 证明如下: 埃氏的原理是找到一个素数后,它的1~n倍就会被掉,任何一个合数都可以被拆成一个质数*另一个数的形式,我们对每一个质数对应的可能的(合)数都枚举了,这就保证了所有可能的合数
转载 2017-08-20 21:07:00
265阅读
2评论
#include <cstdio>const int N = 1e7 + 5;bool is_prime[N]; int n, cnt, prime[N];void f() { for (int i = 2; i <= n ; i++) { if (!is_prime[i]) prime[cnt++] = i; for (int j = 0; prime[j]...
原创 2021-08-27 14:31:20
287阅读
考虑这样一件事情:如果 \(x\) 是合数,那么 \(x\) 的倍数也一定是合数。利用这个结论,我们可以避免很多次不必要的检测。 如果我们从小到大考虑每个数,然后同时把当前这个数的所有(比自己大的)倍数记为合数,那么运行结束的时候没有被标记的数就是素数了。 代码实现 先把所有的数都看成素数,然 ...
转载 2021-08-12 16:48:00
115阅读
2评论
题目链接:https://www.acwing.com/problem/content/description/870/时/空限制:1s / 64MB题目描述给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤10^6输入样例8输出样例4解题...
原创 2022-02-03 14:16:15
139阅读
【代码】素数——欧拉
原创 2022-08-27 02:15:30
167阅读
题目链接:https://www.acwing.com/problem/content/description/870/时/空限制:1s / 64MB题目描述给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤10^6输入样例8输出样例4解题...
原创 2021-07-13 16:28:02
262阅读
素数是数论的入门,当然也非常重要。所谓素数(也叫质数),就是因数只有1和它本身的数。 今天讲一下怎么素数。 第一种算法,就是最朴素最暴力的算法,是人的都会。就是对于每一个数n,从 i = 2开始,依次判断n能否被i整除。 好想的当然也就慢,这个算法复杂度是O(nlogn),当n为1e7 时就过
原创 2021-05-29 18:29:57
156阅读
素数 如果我们想要知道小于等于 n有多少个素数呢? 一个自然的想法是我们对于小于等于n的每个数进行一次判定。这种暴力的做法显然不能达到最优复杂度,考虑如何优化。 考虑这样一件事情:如果x是合数,那么x的倍数也一定是合数。利用这个结论,我们可以避免很多次不必要的检测。 如果我们从小到大考虑每个数, Read More
原创 2021-08-25 17:48:05
450阅读
首先考虑素数, 朴素的判断素数复杂度 $O(\sqrt n)$​ 埃氏 前几天做 mit6.s081 lab 的时候看到的, 其实就是埃氏 p = get a number from left neighbor print p loop: n = get a number from left ...
转载 2021-09-13 17:17:00
112阅读
2评论
#include <cstdio>const int N = 1e7 + 5;bool is_prime[N]; int n, cnt, prime[N];void f() { for (int i = 2; i <= n ; i++) { if (!is_prime[i]) prime[cnt++] = i; for (int j = 0; prime[j]...
原创 2022-02-03 10:03:07
146阅读
高效找出2-n之间的所有素数。#include <iostream>#include <vector>#include <cmath>using namespace std;int n = 1000000;void PrimeSelect(vector<int> &prime, vector<bool> &...
原创 2022-08-10 15:11:17
76阅读
区间 对$[2,\sqrt{b}]$进行埃氏的同时对区间$[a,b]$进行筛选
原创 2022-11-03 15:18:48
251阅读
//暴力枚举 素数 o(n 根号n) for(int i=2;i<=n;i++){ bool g=0; for(int j=2;j*j<=i;j++){ if(i%j==0){
原创 2022-11-09 14:38:40
67阅读
基本定义 质数,也称素数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 一、试除法 简单而暴力,查看$i(2\leq i\leq N)$是否整除$n,$时间复杂度为$O(sqrt(n)),$相对来说比较低效 bool is_prime(int n) { if (n < 2) r ...
转载 2021-08-13 21:04:00
380阅读
2评论
        在上学期的办公室工作中,其实很多次都需要用到高级筛选:比如,这里有一份系里同学正确的名字学号等信息,交上去后上面发下来一个总表,要你在几千个人中找出这些同学并核对他们的信息是否有误。往往这个时候我们就需要用到Excel中的高级筛选了,但是我在之前很多尝试中,发现WPS的高级筛选是没法使用的,后来换成O
素数,其实是将合数给掉的一个过程。求某个大小范围内的素数个数,是用到素数的最最基础的问题。本文中介绍了判断单个数是否为素数的方法与埃氏、欧拉两种素数。 ...
转载 2021-08-13 21:39:00
2180阅读
2评论
代码如下,时间复杂度为O(n) int prime[maxn],num=0; int visit[maxn]; //we should initiate all above to 0 void FindPrime() { for (int i = 2; i <= maxn; i++) { if (! ...
转载 2021-07-29 16:19:00
121阅读
2评论
素数的有很多种 在此给出常见的三种方法 以下给出的所有代码均已通过这里的测试 埃拉托斯特尼 名字好长 :joy: 不过代码很短 思路非常简单,对于每一个素数,枚举它的倍数,它的倍数一定不是素数 这样一定可以保证每个素数都会被出来 还有,我们第一层循环枚举到$\sqrt(n)$就好,因为如果
原创 2021-06-05 10:41:26
185阅读
  • 1
  • 2
  • 3
  • 4
  • 5