前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打印100~200之间的素数

打印100~200之间的素数

作者头像
阿伟@t
发布2023-10-10 14:32:58
1860
发布2023-10-10 14:32:58
举报
文章被收录于专栏:cs阿伟

1.什么是素数:

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

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

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

          所以7是素数

2.题目的分析与思路

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

  • 打印100~200之间的数:
代码语言:javascript
复制
#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之间数的产生:
代码语言:javascript
复制
#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

  • 最终代码:
代码语言:javascript
复制
#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 的开平方之间没有找到一个因子,后面必然也没有因子。

代码语言:javascript
复制
#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之间的偶数不可能为素数所以进行如下优化

 计算输出的个数:

 代码如下:

代码语言:javascript
复制
#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;
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是素数:
  • 2.题目的分析与思路
  • 3.第二种思路:
  • 4.再次优化
    •  计算输出的个数:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档