Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >打印100~200之间的素数

打印100~200之间的素数

作者头像
阿伟@t
发布于 2023-10-10 06:32:58
发布于 2023-10-10 06:32:58
23400
代码可运行
举报
文章被收录于专栏:cs阿伟cs阿伟
运行总次数:0
代码可运行

1.什么是素数:

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

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

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

          所以7是素数

2.题目的分析与思路

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

  • 打印100~200之间的数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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
代码运行次数:0
运行
AI代码解释
复制
#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
代码运行次数:0
运行
AI代码解释
复制
#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
代码运行次数:0
运行
AI代码解释
复制
#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
代码运行次数:0
运行
AI代码解释
复制
#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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis Stream 数据结构实现原理真的很强
Stream 是 Redis 5.0 版本专门为消息队列设计的数据类型,借鉴了 Kafka 的 Consume Group 设计思路,提供了消费组概念。
码哥字节
2023/09/20
5580
Redis Stream 数据结构实现原理真的很强
Redis数据结构:List类型全面解析
Redis 中列表(List)类型是用来存储多个有序的字符串,列表中的每个字符串成为元素 Eelement),一个列表最多可以存储 2^32-1 个元素。
栗筝i
2023/10/16
3.3K0
Redis数据结构:List类型全面解析
Redis源码阅读(二)底层数据结构
Redis对于底层数据结构的极致封装,是Redis高效运行的原因之一。我们结合Redis源码对其进行分析。
星沉
2022/01/28
9190
Redis Stream 实践
stream 是一个日志形式的存储结构,可以往里追加数据,每条数据都会生成一个时间戳ID,stream 也有便捷的读取数据的模型。
dys
2018/08/01
1.3K0
Redis基础教程(十六):Redis Stream
在现代分布式系统中,消息队列和事件驱动架构变得越来越重要,它们在异步处理、解耦服务组件、实现事件驱动的微服务等方面发挥着关键作用。Redis,作为一款多功能的开源数据结构存储系统,自4.0版本开始引入了Stream数据结构,为构建高效的消息队列和事件驱动系统提供了新的可能。本文将深入解析Redis Stream的特性、操作命令,并通过具体案例展示其在实际场景中的应用。
用户11147438
2024/07/12
5990
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列
使用 Redis 实现消息队列 普通的订阅 基于模式(pattern)的发布/订阅 看下源码实现 分析下源码实现 stream 的结构 streamCG 消费者组 streamConsumer 消费者结构 分析下源码实现 基于List的消息队列 基于 Streams 的消息队列 发布订阅 总结 参考 ◆使用 Redis 实现消息队列 Redis 中也是可以实现消息队列 不过谈到消息队列,我们会经常遇到下面的几个问题 1、消息如何防止丢失; 2、消息的重复发送如何处理; 3、消息的顺序性问题; 关于 mq
IT大咖说
2022/03/21
1.3K0
38 张图详解 Redis:核心架构、发布订阅机制、9大数据类型底层原理、RDB和AOF 持久化、高可用架构、性能问题排查和调优
今天我们从全局视角开始,带着问题去寻找答案,梳理 Redis 核心知识点与架构设计:核心架构、String(字符串)、Hashes(散列表)、Lists(列表)、Sets(无序集合)、Sorted Sets(可根据范围查询的排序集合)、Bitmap(位图)、HyperLogLog、Geospatial (地理空间)和 Stream(流)等数据类型底层实现原理、发布订阅机制、RDB、AOF 持久化、主从架构、哨兵集群架构、Cluster 架构、性能优化。(ps:文章内容摘选自我的新书《Redis 高手心法》,更多完整内容详见本书籍)
码哥字节
2025/03/27
3300
38 张图详解 Redis:核心架构、发布订阅机制、9大数据类型底层原理、RDB和AOF 持久化、高可用架构、性能问题排查和调优
Redis 基础数据结构
Redis用到的底层数据结构有:简单动态字符串、双端链表、字典、压缩列表、整数集合、跳跃表等,Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些基础数据结构创建了一个对象系统,这写对象包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象等。
luoxn28
2019/11/06
1.3K0
Redis streams 作为一个纯数据结构
我们在Redis5版本迎来了一个新的数据结构,它的名字叫做"Streams"。(撒花)Streams一经推出,就引起了社区中各位大佬的关注。所以我决定过一段时间做一个社区调查,讨论一下它的使用场景,并会在博客中将结果记录下来(是Redis作者的博客)。今天我想聊的是另一个问题:我怀疑有很多用户认为Streams的使用场景是和Kafka一样的。实际上,这个数据结构的设计背景也是消息的生产和消费,但你应该认为Redis Streams只是更擅长做这样的事情。流是一种很好的模型和"心理模型",它能帮助我们更好的设计系统,但是Redis Streams像其他Redis数据结构一样,它更加通用,可以用来处理更多不同的问题。所以这篇博客我们会重点关注Redis Streams作为一种数据结构有哪些特性,而完全忽略它的阻塞操作、消费群和所有消息相关的内容。
随心助手
2019/10/15
7840
Redis底层数据结构
由图中可知,底层的数据结构有所变化,在Redis7中不再推荐使用ziplist,而是使用listpack代替,但考虑兼容性,目前仍保留ziplist。
用户3876103
2024/08/26
1310
从源码上聊聊Redis-String、List的结构实现
本文的数据类型只讲底层结构和部分机制,不讲具体的使用,使用的话自行bing,但是会提一些应用场景
Karos
2023/07/20
9610
从源码上聊聊Redis-String、List的结构实现
Redis之stream类型解读
Redis stream(流)是一种数据结构,其作用类似于仅追加日志,但也实现了多个操作来克服典型仅追加日志的一些限制。其中包括O(1)时间的随机访问和复杂的消费策略,如消费者群体。 您可以使用流实时记录和同时联合事件。
一个风轻云淡
2023/09/23
4450
[译] Redis Streams介绍
我大学的时候英语6级没过,因此但凡懂点英语的同学,如果你进到此页面,尽量去阅读原文,链接在下方原文地址.最次也要对照着原文阅读,以免我出了什么差错(这是不可避免的),坑了别的小伙伴.
呼延十
2019/07/01
2.1K0
Redis消息队列 | Stream
在RedisV5.0之前, 如果想实现队列功能, 只能用list或者pub/sub实现, 但它们都有自己的缺点.
一个架构师
2022/06/27
1.4K0
redis灵魂拷问:如何使用stream实现消息队列
redis在很早之前就支持消息队列了,使用的是PUB/SUB功能来实现的。PUB/SUB有一个缺点就是消息不能持久化,如果redis发生宕机,或者客户端发生网络断开,历史消息就丢失了。
jinjunzhu
2021/01/05
3.2K0
redis灵魂拷问:如何使用stream实现消息队列
Redis数据结构总结
Redis 本身是一个键值对数据库,这种键值对的存储方式就是哈希映射(Hashmap)的一种体现,即通过键(Key)来快速查找对应的值(Value)。
栗筝i
2023/10/16
3500
Redis数据结构总结
深入剖析 Redis5.0 全新数据结构 Streams(消息队列的新选择)
Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构。Redis的streams主要是一个append only的数据结构,至少在概念上它是一种在内存中表示的抽象数据类型,只不过它们实现了更强大的操作,以克服日志文件本身的限制。
芋道源码
2019/10/29
2.1K0
Redis stream 用做消息队列完美吗
Redis Stream 是 Redis 5.0 版本中引入的一种新的数据结构,它用于实现简单但功能强大的消息传递模式。
勇哥java实战
2024/04/15
4470
Redis数据结构:Zset类型全面解析
Zset,即有序集合(Sorted Set),是 Redis 提供的一种复杂数据类型。Zset 是 set 的升级版,它在 set 的基础上增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列。
栗筝i
2023/10/16
9.3K0
Redis数据结构:Zset类型全面解析
Redis高级特性之Pub/Sub与Stream
在Stream之前,Redis PUB/SUB亦可可实现消息的传递及广播,但消息不支持持久化,不记录消费端状态,并且“Fire and Forgot”,可靠性无法保证。
vitofliu
2019/07/03
4K0
相关推荐
Redis Stream 数据结构实现原理真的很强
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验