输出素数问题

题目:筛选法输出100以内的所有素数
从2开始,2—100之内的数字可以整除2的,就删除,然后到3,2—100可以整除3的数字,删除,以此类推。题目解决如下,因为数字本质无法删除,所以定义一个数组来当作数字的标记,0,1不参与到素数选择中,所以开始标记为1,其实满足条件的默认素数全部标记为0;然后进行筛选,考虑到若之前筛选过2,则后表2的倍数4,6之类的数字就不考虑在内,也就是若当前下表已经为1;就提前结束此趟循环,实现如下:

void num1()
{
	int arr[101]={1,1};//0,1两个数字不参与素数选则
	for(int i=2;i < 101; ++i)
	{
		for(int j=i+1;j < 101;++j)
		{
			if(arr[j] == 1)//之前检测过的非素数数字就跳过
			{
				continue;
			}
			if(j%i == 0)
			{
				arr[j]=1;
			}
		}
	}
	for(int i = 2;i < 101;++i)
	{
		if(arr[i] == 0)
		{
			printf("%d ",i);
		}

	}
}

考虑到输出素数的要求可以随意变换,所以加入供选择的范围,修改如下
这里注意,在main函数中若要找出200以内的素数,则对应的数组长度需要设置为201,也就是素组长度要求比范围大一,否则筛选时会把结尾数字丢掉

void num(int *arr,int len)//筛选法输出arr数组内所有素数
{
	for(int i=2;i <= len-1;++i)
	{
		for(int j = i+1;j <= len-1;++j)
		{
			if(arr[i] == 1)
			{
				continue;
			}
			else if(j%i == 0)
			{
				arr[j] = 1;
			}
		}
	}
	for(int i = 2;i <= len;++i)
	{
		if(arr[i] == 0)
		{
			printf("%d ",i);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值