• 埃氏筛法——标记质数


    3322: 我,水题,来做

    时间限制: 2 Sec  内存限制: 128 MB
    提交: 97  解决: 13
    [提交][状态][讨论版]

    题目描述

    给你一个七位QQ号,输出小于这个QQ号的所有质数.
    质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

    输入

    单组数据
    输入一个QQ号(七位QQ号,因为输出数据过多,样例比较小)
        

    输出

    从小到大输出所有小于这个QQ号的质数,一行一个

    样例输入

    20

    样例输出

    2
    3
    5
    7
    11
    13
    17
    19

    提示

     

    来源

     
    #include "bits/stdc++.h"
    using namespace std;
    int a[1000000];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            for(int i=2;i <= n;i++)
            {
                if(a[i] == 0)
                {
                    printf("%d
    ",i);
                    if((long long) i*i > n) continue;
                    for(int j = i*i;j <= n;j = j+i)
                    {
                        a[j] = 1;
                    }
                }
            }
        }
        return 0;
    }

    数组不能开小,从小开始逐个标记他的倍数,标记到的就不是质数了,而且开的是全局数组,更加的节省时间。

    这是埃氏筛法

  • 相关阅读:
    1004. Counting Leaves (30)
    51Nod 1272 最大距离 (栈或贪心)
    D
    M
    N
    F
    E
    L
    A. Office Keys ( Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) )
    K
  • 原文地址:https://www.cnblogs.com/cunyusup/p/8281010.html
Copyright © 2020-2023  润新知