素数筛法/埃拉托斯特尼筛法(sieve of Eratosthenes)——理解及具体问题

来源:互联网 发布:java try单独使用 编辑:程序博客网 时间:2024/06/06 12:39
筛法求素数理解及具体问题
  素数筛法的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。
  这里可以列举一下1~20:1   2    3   4   5   6  7    8   9  10
                                          11 12 13 14 15 16 17 18 19  20
  对于2,3,它的倍数一定不是素数,随意去除掉这些后剩下:
                                                                5       7                
                                          11      13                17       19
具体举例 ---链接HDU2136
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N=1000005;int a[N];int main(){    int i,j,ans=1;//打表    memset(a,0,sizeof(a));    for(i=2;i<N;i++)//要从二开始,1肯定不行的    {        if(a[i]==0)        {            for( j=i;j<N;j+=i)                a[j]=ans;            ans++;        }    }    int n;    while(~scanf("%d",&n))        printf("%d\n",a[n]);    return 0;}
待补充

0 0
原创粉丝点击