c语言实现位数组实现素数最优算法

蓝桥杯国赛真题解析:同余质数筛法与工程化思维 自然数序列生成是编程基础概念,但其背后常隐含数论约束与算法优化挑战。当涉及‘模7余3的质数’这类同余类质数筛选时,问题本质升华为狄利克雷定理下的等差数列质数分布建模。理解质数密度、上界估算与筛法空间压缩原理,是突破暴力遍历瓶颈的关键技术路径。该类问题广泛应用于密码学安全素数生成、分布式ID设计及竞赛算法优化场景,核心价值在于将数学抽象准确转化为高性能、低内存、可验证的工程实现。 阅读详情

前几天在广州去面试游戏开发,其中一道题是素数的算法优化,无奈之下,实在想不出,失败后回家宿舍查找了一下资料,目前最优的应该是(不太确定)初等数论的筛选法,用空间换时间的一种思想。

筛选法的具体的说明:https://blog.youkuaiyun.com/yangxjsun/article/details/80201735

位数组实现的具说明:https://blog.youkuaiyun.com/qq_37375427/article/details/79797359

下面贴上我的代码:

//VS2017 win10 64位debug
//三代i5,计算21亿多以内的素数,用时146秒
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define N _CRT_INT_MAX    //int 类型的最大表示,大概21亿多
#include <time.h>
#include <math.h>

char *init_bin(int n)
{
	char *tem = (char *)malloc(n / 8+1);//分配内容,因为一个字节有8位,每一位表示一个数,多一个字节是怕越界
	memset(tem, 0, (n / 8+1));           //清空置0
	return tem;
}
int main()
{
	char *a = init_bin(N);
	long long i, j;
	clock_t start, end;
	start = clock();
	for (i = 2; i < N; i++)
	{
		if (i % 2)
			a[i>>3] |= (1<<(i&0x7));//把2的倍数去掉,变为0
	}
	for (i = 3; i < sqrt(N); i++)//把3到根号n质数的倍数去掉
	{
		if (a[i])
		{
			for (j = i + i; j < N; j = j + i)
				a[j >> 3] &= ~(1 << (j & 0x7));
		}
	}

	end = clock();
	printf("time=%f\n", (double)((end - start) / CLK_TCK));//计算时间
	for (i = 0; i < N; i++)
	{
		if (a[i >> 3] & (1 << (i & 0x7)))
			printf("%d %c", i, (i % 10 == 0 )? '\n' : ' ');
	}

	system("pause");
	return 0;

}

我的电脑是三代I5,4G win10系统,计算21亿多用了146秒。大伙可以试试

打印比计算还要长时间

附上初等数论原书,唉,后悔专业课没学好

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01 算法设计 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第一百五十九篇 湖仓一体架构01

i} = \frac{\exp(-|x_i-x_j|^2/2\sigma_i^2)}{\sum_{k\neq i}\exp(-|x_i-x_k|^2/2\sigma_i^2)} ),在低维空间使用t分布 qij​=∑k=l​(1+∥yk​−yl​∥2)−1(1+∥yi​−yj​∥2)−1​。1. RSA算法:基于大整数分解难题。3. 距离计算:Haversine公式计算球面距离:a=sin2(Δϕ/2)+cosϕ1​cosϕ2​sin2(Δλ/2),c=2⋅atan2(a​,1−a​),d=R⋅c。

weixin_49199313的博客 13

(含图解)判断质数的方法(暴力法优化和高效方法)

OJ平台: 判断质数 暴力法优化版: 将偶数排除在外,且去除了冗余的运算。 class Solution { public: int countPrimes(int n) { if(n<3)return 0; int count = 1;//包括了2 //由于是计算小于n的所有质数,所以2-->0 //+=2排除偶数 for(int i = 3;i<n;i+=2){ if(i

CppYyds的博客 1116

【信息科学与工程学】【安全领域】第七十篇 负载均衡设备的主要算法01

每个服务器有一个对槽位的偏好排序, 调度器(表)需要为每个槽位分配一个服务器, 目标是整体上满足所有服务器的偏好(即均匀填充), 同时保持稳定性(变化小)。: 对于一个新到达的请求, 如果将其分配到当前有cj个请求(包括正在服务的)的服务器sj, 其期望等待时间为 (cj + 1) / μj。输入:服务器集群S={s1, s2, ..., sn}, 权重W={w1, w2, ..., wn}, 当前指针i。输出:选中的服务器sj。输入:服务器集群S, 各服务器当前活动连接数cj, 各服务器预设权重wj。

weixin_49199313的博客 524

c语言数组求素数,C语言入门:一维数组求素数

/* Note:Your choice is C IDE */#include "stdio.h"void main(){//素数//已知有数组int a[10]={1,2,3,7,9,11,13,24,21,10},//输出10位数组元素,并且进行数组元素中属于素数进行判断,//如属于素数则进行输出并且统计素数个数,反之不进行输出;//① 定义变量和数组正确int a[10]={1,2,3,7,...

weixin_34337134的博客 6519

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1273

【信息科学与工程学】【安全领域】第三十五篇 网络安全算法表

编号算法名称算法的逐步骤思考推理的数学方程式和分解的数学方程式参数/变量列表复杂度(时间/空间)1​AES (高级加密标准)​1. 密钥扩展:从初始密钥生成轮密钥。 2. 初始轮: 3. 主轮循环(Nr-1轮):  - SubBytes:(非线性字节替换)  - ShiftRows:对状态矩阵的行进行循环移位。  - MixColumns:(在GF(2⁸)上的矩阵乘法)  - AddRoundKey: 4. 最终轮:执行SubBytes、ShiftRows、AddR

weixin_49199313的博客 1379

C语言复习 -- 数组(判断素数的四种方法)

一、数组 引子: 如何写一个程序计算用户输入的数字的平均数? 不需要记录输入的每一个数 如何写一个程序计算用户输入的数字的平均数,并输出所有大于平均数的数? 思考:这个程序存在什么隐患? 数组的使用:如何定义和使用数组,数组的下标和下标的范围 1.1.定义数组 < 类型 > 变量名称【元素数量】 int grades[100]; double weight[20]; 元素数量必须是整数 c99之前,元素数量必须是编译时刻确定的字面量 什么是数组? 是一种容器(放东西的

sfwefqe的博客 4251

【信息科学与工程学】【数据科学】数据科学领域 第十二篇 大数据主要算法07 任务工序(2)

工序类别工序名称工序描述处理时序输入输出控制点质量指标异常处理数据接入工序​流数据源连接连接到外部流数据源初始阶段流数据源配置流数据连接连接参数配置连接成功率重连机制,失败告警数据拉取从数据源拉取数据持续实时数据源连接原始数据流拉取频率,批大小数据延迟,吞吐量超时重试,流量控制反序列化将二进制数据反序列化数据到达时二进制数据结构化数据记录序列化格式反序列化成功率格式异常处理数据预处理工序​数据验证验证数据完整性和格式反序列化后原始数据记录验证后数据验证规则数据质量合格率丢弃无效数据,异常记录数据清洗清洗脏数

weixin_49199313的博客 781

C语言:一维数组用筛选法求N之内的素数详解

第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。这样⼀直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。实际思路先将1挖走(1不是素数)然后将n以内为2的倍数筛掉,将3的倍数筛掉,将5的倍数筛掉,……,直至将最大的、小于等于sqrt(n)的那个素数的倍数筛掉后,剩下的全是素数。⾸先解释下什么是筛选法?...

PsatYiKing的博客 3837

【信息科学与工程学】计算机科学与自动化——第八十一篇 Java分布式软件高并发/高可用算法01

4. 消息队列(如Kafka的Topic分区,本质是范围)。3. 若是ACCEPT事件,bossGroup线程接受连接,创建SocketChannel,并将其注册到workerGroup的一个EventLoop的Selector上,关注READ事件。1. 分布式缓存分片(如Redis Cluster)。4. 分布式文件存储(如Ceph CRUSH)。6. 调用栈的模拟(如协程)。3. 服务网格(如Istio)的基础。2. 本地缓存与集中式缓存(如Redis)的一致性维护。3. 静态数据(如配置)缓存。

weixin_49199313的博客 1234

【信息科学与工程学】计算机科学与自动化——第八十四篇 C++分布式软件高并发/高可用算法01

4. 提交:协调者选择提交时间戳(>所有读时间戳),两阶段提交:a) 写意图预提交到所有参与者,b) 参与者持久化后确认,c) 协调者决定提交,异步清理意图。:客户端请求发送到协调节点,协调节点根据路由转发到主分片所在节点。Span有父子关系。1. 索引文档:客户端发送PUT请求到协调节点,协调节点路由到主分片节点,主分片写入本地,然后并行复制到副本分片,等待确认后响应客户端。3. 搜索:客户端发送搜索请求到协调节点,协调节点广播到所有相关分片,每个分片执行查询,返回结果,协调节点合并、排序、分页后返回。

weixin_49199313的博客 1080

C语言实现素数判断(优化)

C语言判断素数的优化

记录C++/Linux/操作系统的学习 606

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1389

BloomFilter布隆过滤器C,Python,Redis实现

Python实现:https://github.com/chfguo/bloomfilter 基本原理: 在进行布隆过滤器的介绍前,先说一下位数组(bit array)。所谓的位数组,主要是为了有效地利用内存空间而设计的一种存储数据的方式。在这种结构中一个整数在内存中用一位(1 bit)表示。这里所谓的表示就是如果整数存在,相应的二进制位就为 1,否则为 0。 布隆过滤器便利用了位数组的特性,它通...

chf的博客 1513

c语言用数组实现求素数,并且运算过程仅使用+-法

c语言用数组实现求素数,并且运算过程仅使用+-法

c语言中的位数组源码(bit array)

c语言中的结构位数组的具体操作实现。位数组的应用范围很广的、

深入解析TMS320C6421 DSP架构:VLIW、缓存与EDMA实战优化

数字信号处理器(DSP)是嵌入式实时信号处理系统的核心引擎,其架构设计直接决定了系统的计算效率和实时性。以超长指令字(VLIW)为代表的并行计算架构,通过编译器静态调度指令级并行,能在单个时钟周期内执行多条指令,极大提升了定点运算的吞吐量。这种设计理念在通信、音频和工业控制等领域具有重要技术价值,尤其适用于多通道音频编解码、基带处理等计算密集型场景。为了充分发挥硬件潜力,必须深入理解其内存子系统,特别是多级缓存(如L1P、L1D和L2)的灵活配置策略,以及增强型直接内存访问(EDMA)控制器如何作为数据搬运

weixin_30627341的博客 407

从零打造M328晶体管测试仪:硬件DIY与烧录避坑指南

本文是一份详尽的M328晶体管测试仪DIY指南,涵盖从硬件选型、PCB设计、焊接组装到固件烧录的全过程。重点解析了使用AVR单片机与Arduino IDE环境时,如何正确设置熔丝位以避免“白屏”等常见问题,并提供了使用ISP编程器进行烧录的实操步骤与校准方法,帮助电子爱好者成功打造属于自己的高性价比元件测试工具。

weixin_29243063的博客 475

Roaring Bitmap:海量整数集合存储与高效集合运算的工程实践

在数据处理领域,高效存储和查询大规模整数集合是许多核心场景的基础需求,例如用户画像、实时分析和倒排索引。位图索引作为一种经典的数据结构,通过比特位表示整数存在性,实现了极高的集合运算效率,但传统位图在数据稀疏时内存浪费严重。Roaring Bitmap通过分桶和自适应容器(数组、位图、运行长度编码)的混合存储策略,在保持位图高速集合运算优势的同时,极大地压缩了内存占用。这一技术价值在于,它使得对千万乃至亿级用户ID进行实时的交集、并集和差集运算成为可能,直接支撑了用户标签系统、实时人群圈选等对性能和资源敏感

weixin_34259232的博客 418

MT5策略如何设置回测结果才能最接近实盘

摘要:在MT5回测中,选择"每笔分笔报价"模式最接近实盘交易,因其使用真实Tick数据模拟价格波动、点差和滑点。关键设置包括:下载高质量历史数据、合理设定点差和滑点、使用正常回测速度。该模式能准确测试挂单、止盈止损等策略,虽然速度较慢但结果最可靠,避免其他模式造成的失真,是评估交易策略表现的最佳选择。(149字)

weixin_38915451的博客 1878

一文学会Inner-MPDIoU:YOLOv11边界框回归优化全解析

Inner-MPDIoU 凭借“辅助边框+最小点距离”的双重创新,成功解决了传统 IoU 损失在小目标、遮挡场景、位置偏差场景下的收敛和判别难题,为 YOLOv11 注入了更强的边框回归能力。从原理剖析到代码集成,本教程已为你铺就了一条“定位精度跃升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“定位精准”的答卷——相信我,当你看到检测框完美贴合目标的那一刻,你会明白这份尝试的价值。我很乐意在你实践过程中帮你解决任何问题,让我们一起推动目标检测在边框回归领域的边界。

know_F0727的博客 141
上一篇: 微信跳一跳辅助程序开发,基于C++与opencv图像识别
下一篇: 关于Qt creator /QT Designer卡死的解决方法的补充
搬砖大学生
博客等级 码龄14年 29粉丝 24原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值