一种实现筛选素数的方法

本文分享了一段用于找出100到200之间所有素数的C语言代码,并通过修正算法逻辑错误实现了正确的素数筛选过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在解决一个判断100-200间素数的问题是,首先想到的是利用素数的特性(因数只有1和他本身),首先想到的是i定义a,b两个数利用两层for循环,第一层循环遍历100-200间的数,
第二层循环看是否能够用a整除,若能整除则该数不是素数,否则是素数,刚开始的代码是这样的
include"stdio.h"
#void main()
{
	int a = 0;
	for (int a = 100; a <= 200; a++)
	{
		int b = 0;
		for (int b =2 ; b <a; b++)
		{
			if (a%b == 0)
			{
				printf_s("不是素数\n");
			}
			else
				printf_s("%d是素数\n", a);
		}		
	}
	getchar();
}

自信满满,这题太简单了,而现实往往是打脸的


一个数输出好多遍,结果也不正确,苦思冥想,肯定是算法出了问题,

{
			if (a%b == 0)
			{
				printf_s("不是素数\n");
			}
			else
				printf_s("%d是素数\n", a);
		}		
在这个地方,例如105,肯定不会被2整除,会跳到else直接输出105是素数,显然105不是素数。

循环出了问题,怎么解决呢?肯定要想一个办法,使b能循环到小于a的地方且要使b中的数都能被a除一遍,好,思路来了,改良代码

将此片段改为

for (int b =2 ; b <a; b++)
		{
			if (a%b == 0) break;
			if(b+1==a)
			printf_s("%d\n", a);
		}		
第一个if保证如果a能被b整除的就跳出,进行b++来判断下一个b能否满足条件,第二个if控制b能遍历从2到a所有的数,如果不满足第一个条件,且满足第二个条件的话,就会

输出a,即为素数。

两个完美的循环,代码的之美就在于此。

奉上完整的代码。

#include"stdio.h"
void main()
{
	int a = 0;
	for (int a = 100; a <= 200; a++)
	{
		int b = 0;
		for (int b =2 ; b <a; b++)//从2开始循环,直到小于a
		{
			if (a%b == 0) break;
			if(b+1==a)             //防止像105/2不能整除就输出a的情况
			printf_s("%d\n", a);//不满足第一个,且满足第二个就会输出a
		}		
	}
	getchar();//防止闪退
}

谢谢观看小菜鸟的程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值