zoukankan      html  css  js  c++  java
  • 素数筛 codevs 1675 大质数 2

    1675 大质数 2

     

     时间限制: 1 s
     空间限制: 1000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    小明因为没做作业而被数学老师罚站,之后数学老师要他回家把第n个质数找出来。

    小明于是交给聪明的你。请你帮忙!【wikioi-1530】

    …………………………以上为背景…………………………

    老师怀疑小明仅仅是找到第n个质数,于是又叫小明把1到n以内(不包括n)的质数全部找出来。小明又找到了你……

    输入描述 Input Description

    一个正整数n。

    (1<=n<=1000000)

    输出描述 Output Description

    n以内的质数,每个一行。

    样例输入 Sample Input

    233

    样例输出 Sample Output

    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
    31
    37
    41
    43
    47
    53
    59
    61
    67
    71
    73
    79
    83
    89
    97
    101
    103
    107
    109
    113
    127
    131
    137
    139
    149
    151
    157
    163
    167
    173
    179
    181
    191
    193
    197
    199
    211
    223
    227
    229          //(不含n=233)

    Euler筛法(线性筛法):
     1 #include<iostream>
     2 using namespace std;
     3 #include<cstdio>
     4 #define N 1001000
     5 #include<bitset>
     6 bitset<N>check;
     7 int prim[N],tot=0;
     8 int main()
     9 {
    10     int n;
    11     cin>>n;
    12     check.set();
    13     for(int i=2;i<n;++i)
    14     {
    15         if(check[i])
    16         {
    17             printf("%d
    ",i);
    18             prim[tot++]=i;
    19         }
    20         for(int j=0;j<tot;++j)
    21         {
    22             if(prim[j]*i>=n) break;
    23             check[prim[j]*i]=false;
    24             if(i%prim[j]==0) break;
    25         }
    26     }
    27     
    28     return 0;
    29 }

    埃氏筛法:

     1 /*/*这个程序在i==四万多的时候溢出了,而欧拉筛法因为有“if(i%prim[j]==0) break;
     2 ”,所以一般不会乘法溢出*/*/
     3 #include<iostream>
     4 using namespace std;
     5 #include<cstdio>
     6 #define N 1001000
     7 #include<bitset>
     8 bitset<N>check;
     9 int prim[N],tot=0;
    10 int main()
    11 {
    12     int n;
    13     cin>>n;
    14     check.set();
    15     for(int i=2;i<n;++i)
    16     {
    17         if(check[i])
    18         {
    19             printf("%d
    ",i);
    20             for(int j=i*i;j<n;j+=i)
    21               check[j]=false;
    22         }
    23         
    24     }
    25     
    26     return 0;
    27 }
  • 相关阅读:
    Bitcoin core核心客户端在CentOS7上的安装和配置
    Struts的标签及JSTL和EL表达式的使用总结
    Java反编译
    Tomcat 各版本 配置SSI服务实现html模块化实现#include virtual="static/_header.html"
    33
    SQL Server Management Studio无法记住密码
    SQL Server 创建角色和账号
    JS 取出DataGrid 列
    关于HTTP协议的小实验
    DNS服务操作小实验
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5515424.html
Copyright © 2011-2022 走看看