筛素数(欧拉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;
}
posted @ 2021-06-02 20:32  新城R  阅读(34)  评论(0)    收藏  举报