用筛选法求100以内的素数

思路:

1:先对1到100进行赋值,为了方便起见,我们可以让a[1]=1;a[2]=2;...;a[100]=100;即a[i]=i。为此我们需要开辟101个空间(因为a[0]不使用),用循环对a[1]~a[100]进行赋值。

2:判断一个数是否是素数,只用判断它除了1和它本身以外还有没有其他的其他的因数,如果没有,那这个数就是素数。

3:我们可以用循环进行a[i]%i==0运算,如果条件为真,则不是素数。但为了减少代码冗余,提高运行速度,降低循环次数,我们不需要从1一直判定到他本身,只用从1判断到它的平方根即可。

4:如果条件为真,我们就把a[i]=0,最后进行循环输出,如果a[i]=0,则不输出。

代码如下:

#include
void main()
{
	int i,j;
	int num = 0;
	int a[101];
	for(i = 1;i <= 100;++i)
	{
		a[i]=i;
	}
	for(i = 2;i <= 10;++i)
	{
		for(j = i+1;j <= 100;++j)
		{
			if(a[j]%i==0)
				a[j]=0;
		}
	}
	printf("100以内素数有:");
	for(i = 2;i <= 100;++i)
	{
		if(a[i]!=0)
		{
			printf("%d ",a[i]);
			num++;
		}
	}
	printf("\n");
	printf("100以内素数的个数为:%d\n",num);
}

你可能感兴趣的:(经典例题)