AcWing 868. 筛质数

简介: AcWing 868. 筛质数
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=1000005;
int primes[N],cnt;
bool st[N];
void get_primes(int n){//埃氏筛统计素数
  for(int i=2;i<=n;i++){
    if(!st[i]){
      primes[cnt++]=i;
      for(int j=i*2;j<=n;j+=i) st[j]=true;
    }   
  }
}
int main()
{
  int n;
  scanf("%d",&n);
  get_primes(n);
  printf("%d\n",cnt);
  //for(int i=0;i<cnt;i++) cout<<primes[i]<<" ";
    return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=1000005;
int primes[N],cnt;
bool st[N];
void get_primes(int n){//线性筛  
  for(int i=2;i<=n;i++){
    if(!st[i]) primes[cnt++]=i;
    for(int j=0;primes[j]<=n/i;j++){
      st[primes[j]*i]=true;
      if(i%primes[j]==0)break;//primes[j]一定是i的最小质因子
    }     
  }
}
int main()
{
  int n;
  scanf("%d",&n);
  get_primes(n);
  printf("%d\n",cnt);
  //for(int i=0;i<cnt;i++) cout<<primes[i]<<" ";
    return 0;
}
/*
n只会被最小质因子筛掉
1. i%primes[j]==0 
   primes[j]一定是i的最小质因子  primes[j]一定是primes[j]*i的最小质因子
2. i%primes[j]!=0
   primes[j]一定小于i的所有质因子  primes[j]一定是primes[j]*i的最小质因子
对于一个合数x,假设primes[j]是x的最小质因子,当i枚举到x/primes[j]的时候这个合数会被筛掉
*/
相关文章
|
2月前
|
人工智能 算法 BI
数学知识:质数与约数
数学知识:质数与约数
42 0
|
2月前
|
Java C++
筛法求质数
筛法求质数
36 0
|
8月前
|
C++
筛质数、分解质因数和快速幂的应用
筛质数、分解质因数和快速幂的应用
50 0
|
12月前
AcWing 867. 分解质因数
AcWing 867. 分解质因数
|
11月前
|
算法 C语言 C++
【数论】试除法判断质数,分解质因数,筛质数
将定义进行模拟,若整除了除1与其自身的另外的数,则为质数
82 0
每日一题——最大回文数乘积
每日一题——最大回文数乘积
86 0
AcWing 246. 区间最大公约数 (gcd性质 线段树)
AcWing 246. 区间最大公约数 (gcd性质 线段树)
91 0
AcWing 246. 区间最大公约数 (gcd性质 线段树)
AcWing 726. 质数
AcWing 726. 质数
45 0
AcWing 726. 质数
AcWing 724. 约数
AcWing 724. 约数
55 0
AcWing 724. 约数