筛法求100000000(一亿)以内的所有素数

算法:

s0:定义数组并赋值,2是素数(计数、输出)
s1:把2的倍数删掉;
s2:2之后剩下的第一个数字是素数,这个数字是3(计数、输出);
s3:把3的倍数删掉;
s4:3之后剩下的第一个数字是素数,这个数字是5(计数、输出);
s5:把5的倍数删掉;
……(类推省略)

C语言实现:

#include <stdio.h>
int a[100000000];//在主函数外定义全局变量数值上限高,自行修改到3、4亿也行,主函数里可定义不到这么大
int main()
{
	int n,i,k,v=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		a[i]=i+1;
	}
	for(i=1;i<n;i++)
	{
		if(a[i]!=0)//晒过后的第一个非零值一定是素数
		{
			for(k=2;k*(i+1)<=n;k++)
			{
				a[k*(i+1)-1]=0;//将a[i]的整数倍筛掉
			}
			//printf("%d、",a[i]);打印太慢,这里屏蔽了
			v++;		
		}
	}
	printf("共%d个素数\n",v);
	return 0;
}

结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46606140/article/details/104987254