筛法求素数理解及具体问题
素数筛法的基本思想是:把从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
这里可以列举一下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;
}
待补充