筛素数(欧拉and埃氏)
埃氏筛法
#include<stdio.h>
int i,j,vis[10101010];
void prime()
{
vis[0]=vis[1]=1;
for(i=2; i<=100; i++)
if(!vis[i])
for(j=i*i; j<=100; j+=i)
vis[j]=1;
}
int main()
{
prime();
for(i=1; i<=100; i++)
printf("%d %d\n",i,vis[i]);
return 0;
}
欧拉筛法
其中pri[0]
代表区域内的素数个数pri[i]
表示第 i 个素数
而vis[i]
则代表 i 是否是素数
#include<stdio.h>
#define N 100
int i,j,pri[N],vis[N];
void prime()
{
for(i=2;i<=N;i++)
{
if(!vis[i]) pri[++pri[0]]=i;
for(j=1;j<=pri[0]&&i*pri[j]<=N;j++)
{
vis[i*pri[j]]=1;
if(i%pri[j]==0) break;
}
}
}
int main()
{
prime();
for(i=1;i<N;i++)
printf("%d %d\n",i,vis[i]);
return 0;
}