用筛选法求100以内的的素数

用筛选法求100以内的的素数

1.算法介绍

	筛选法是指埃拉托色尼(Eratosthenes)筛选,埃拉托色尼是古希腊的著名数学家。他采取的方法是,先写下1到1000的全部整数,然后逐个判断它们是否素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。

2.算法流程

	1.先挖掉1;
	2.用下一个未被挖掉的数p除p后面各数,把p的倍数挖掉;
	3.检查p是否小于根号n的整数部分(如果n=100,p<11),成立则返回第2步,不成立则结束;
	4.剩下的就是素数。

3.代码(c语言)

#include <stdio.h>
#include <math.h>

int main()
{
	int i, j, n, a[101];                           //定义数组包含101个元素 
	                                                
	for (i = 1; i <= 100; i++)                     //a[0]不用,只用a[1]到a[100],其值为1到100 
	{
		a[i] = i;                                  
	}
	a[1] = 0;                                     //去掉1,1既不是质素也不是合数 
	for (i = 2; i < sqrt(100); i++)               //求2开始的质数
	{
		for (j = i+1; j <= 100; j++)
		{
			if (a[i] != 0 && a[j] != 0)
			{
				if (a[j] % a[i] == 0)             //让后面的数除以前面的数,如果余数为0,表明该数不是素数 
					a[j] = 0;                     //使该数=0,去掉该数 
			}
		}
	}
	printf("\n");
	for (i = 2, n = 0; i <= 100; i++)            //输出素数 
	{
		if (a[i] !=0)                            //选出不等于0的数 
		{
			printf("%5d", a[i]);
			n++;                                 //累计本行输出的个数 
		}
		if (n == 10)                             //每10个换行 
		{
			printf("\n");
			n = 0;
		}
	}
	printf("\n");
	
	return 0;
}

4.结果

devc++运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值