打印100~200之间的素数

这篇博客介绍了如何使用C语言打印100到200之间的素数,包括两种判断素数的算法。第一种方法是通过遍历2到i-1的整数试除,第二种方法更高效,只遍历到i的平方根。文章还优化了代码,跳过了偶数检查,最后输出了素数的总数。
摘要由CSDN通过智能技术生成

目录

1.什么是素数:

2.题目的分析与思路

打印100~200之间的数:

判断i是否为素数:

2到 i-1之间数的产生:

判断:

 计算输出的个数:


1.什么是素数:

        素数又叫质数,只能被1和它本身整除

例如:7,只能被1和7整除,

          1,2,3,4,5,6都不能整除7

          所以7是素数

2.题目的分析与思路

分析题目,要想打印100~200之间的素数,首先需要会打印100~200之间的数

  • 打印100~200之间的数:

#include<stdio.h>
int main() {
	int i = 0;
	for (i =100;  i <= 200; i++)
		printf("%d ", i);
		return 0;
}

关于for循环可以参阅另一篇博客    分支和循环语句

执行结果如下:

接下来需要判断i是否为素数

  • 判断i是否为素数:

那么该如何判断呢?

可以使用 2 到 i-1 之间的数去试除  i,如果2 到 i-1 之间没有数能整除 i ,那么i就是素数

例如:前面我们说  7是素数

那么我们用2到6之间的数试除7,如果没有数能整除7那么7就是素数

综上,我们需要先产生2到 i-1 之间的数

  • 2到 i-1之间数的产生:

#include<stdio.h>
int main() {
	int i = 0;
	for (i = 100; i <= 200; i++)
	{   //下面是2到 i-1之间数的产生 
		int j = 0;
		for (j = 2; j < i; j++)
		{
               //这里需要用j试除i
		}
	}
		printf("%d ", i);
		return 0;
}

如上,接下来我们需要用  j  试除  i

  • 最终代码:


#include<stdio.h>
int main() {
	int i = 0;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;//表示是素数
		//判断i是否为素数
		//使用2~i-1之间的数字去试除i
		int j = 0;
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)    //表示不是素数
			{
				flag = 0;
				break;    //结束当前循环的周期,执行下面的语句,注意if语句不是循环
			}
		}
		if (flag == 1)
			printf("%d ", i);
	}
		
		return 0;
}

实际上,上述方法比较复杂,接下来我们来介绍一种效率更高

3.第二种思路:

如果 i=m*n,那么一定可以在2 ~ i的开平方 之间找到一个 i 的因子

比如:

16=2*8

16=4*4

那么

如果在 2~i 的开平方之间可以找到一个因子,后面(i 的开平方~i之间)必然也有一个因子。

如果在 2~i 的开平方之间没有找到一个因子,后面必然也没有因子。

#include<stdio.h>
#include<math.h>
int main() {
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;//表示是素数
		//判断i是否为素数
		//使用2~i-1之间的数字去试除i
		int j = 0;
		for (j = 2; j <=sqrt(i); j++)
		{
			//拿j来试除i
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (1 == flag)
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

4.再次优化

100~200之间的偶数不可能为素数所以进行如下优化

 计算输出的个数:

 代码如下:

#include<stdio.h>
int main() {
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;//表示是素数
		//判断i是否为素数
		//使用2~i-1之间的数字去试除i
		int j = 0;
		for (j = 2; j < i; j++)
		{
			//拿j来试除i
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (1 == flag)
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

后面输出个数的方法与之类似,这里就不展示了

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿伟@t

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值