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]的时候这个合数会被筛掉
*/
相关文章
|
7月前
|
人工智能 算法 BI
数学知识:质数与约数
数学知识:质数与约数
72 0
|
7月前
|
Java C++
筛法求质数
筛法求质数
58 0
筛质数、分解质因数和快速幂的应用
筛质数、分解质因数和快速幂的应用
68 0
蓝桥杯:递推 例题:数字三角型问题
蓝桥杯:递推 例题:数字三角型问题
72 0
|
算法 C语言 C++
【数论】试除法判断质数,分解质因数,筛质数
将定义进行模拟,若整除了除1与其自身的另外的数,则为质数
141 0
|
Java Python
leetcode每日一题.445:两数相加II
leetcode每日一题.445:两数相加II
88 0
|
算法
质数筛法:朴素素数筛,埃氏筛,欧式筛
质数筛法:朴素素数筛,埃氏筛,欧式筛
160 0