zoukankan      html  css  js  c++  java
  • 数学:埃拉托斯特尼筛法

    埃筛在ACM中不可用

    其实就是筛素数,我找到完整的名字了!

    要得到自然数n以内的全部素数,必须把不大于 的所有素数的倍数剔除,剩下的就是素数

    我找的例题比较神奇,它限制了空间1MB,这样的话假如我要找出第n个素数是什么,我筛的范围就要比n要大很多

    但是到底大多少呢?不清楚,但是这个题空间限定了,只能一个一个判断,我这里强行线性筛了

    根据数据得到了最大筛到多少

    其实如果空间够的话,尽可能多筛一些也是可以的,这里就涉及一个时空权衡的问题

     1 #include<cstdio>
     2 #include<cmath>
     3 using namespace std;
     4 const int maxn=373682;
     5 bool v[maxn];
     6 int n;
     7 void sieve(int x)
     8 {
     9     int m=int(sqrt(x)+0.5);
    10     for(int i=2;i<=m;i++)
    11         if(!v[i])
    12             for(int j=i*i;j<=x;j+=i)
    13                 v[j]=1;
    14 }
    15 int main()
    16 {
    17     scanf("%d",&n);
    18     sieve(maxn);
    19     int cnt=0;
    20     for(int i=2;i<n;i++)
    21     {
    22         if(!v[i])
    23             printf("%d
    ",i);
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    eclipse历史版本下载地址
    注解@SuppressWarnings
    VB创建文件夹
    VB学习生成JavaBean
    C++下的强制转换类型
    Django扩展
    数据查询操作
    深入剖析C++多态、VPTR指针、虚函数表
    快速排序一步一步优化
    cookie与session
  • 原文地址:https://www.cnblogs.com/aininot260/p/9477705.html
Copyright © 2011-2022 走看看