• 埃式筛选法


    题目:给定整数n,请问n以内有多少个素数?

    n<=1e6

    样例输入1

    11

    输出

    5

    样例输入2

    1000000

    输出

    78498

    算法详解

    i从2开始遍历,2肯定是素数那么他的倍数肯定不是素数,标记下来,然后遍历没被标记的数。遍历完所有就只剩下没被标记的素数了。

    参考代码

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    const int MAX_N=1000000;
    int is_prime[MAX_N+1];
    int prime[MAX_N+1];
    int sieve(int n);
    int main()
    {
        int n;
        scanf("%d",&n);
        printf("%d
    ",sieve(n));
        return 0;
    }
    int sieve(int n){
        int sum=0;
    for(int i=2;i<=n;i++){
        if(is_prime[i]==0){
                prime[sum++]=i;
            for(int j=2*i;j<=n;j+=i){
                    is_prime[j]=1;
            }
        }
    }
    return sum;
    }
  • 相关阅读:
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    springboot之RabbitMQ
    IIS自动发布脚本
    存储器
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/7448978.html
Copyright © 2020-2023  润新知