zoukankan      html  css  js  c++  java
  • 线性筛法求素数

    和朴素的筛法求素数不同,线性筛法可以省去许多重复的删除

    例如12:它可以被2,6;3,4筛掉,被筛了2次;

    所以新的算法是在处理数i时,枚举i之前的所有质数并用i*质数进行删除,直到第一个质数k能整除i就在这之后停止,因为接下来的所有质数所产生的需要被筛的数num=p*i都可以在后面的枚举到(i/k*p)时被筛掉:(i/k*p)*k(显然可以保证在k之前没有一个数能整除(i/k*p)),所以这样就能保证所有合数只被筛掉了一遍

     1 void init(int k)
     2 {
     3     memset(bl,1,sizeof(bl));
     4     bl[1]=0;
     5     for(int i=2;i<=k;i++)
     6     {
     7         if(bl[i]) prime[++tot]=i;
     8         for(int j=1;j<=tot;j++)
     9         {
    10             if(i*prime[j]>k) break;
    11             bl[i*prime[j]]=0;
    12             if(i%prime[j]==0) break;
    13         }
    14     }
    15 }
    View Code
  • 相关阅读:
    UVA
    UVA
    UVA
    UVA
    NLP介绍
    新建Springboot项目
    添加ssh密钥
    git 错误合集
    Git入门操作
    Hadoop MapReduce
  • 原文地址:https://www.cnblogs.com/Forever-666/p/10660949.html
Copyright © 2011-2022 走看看