廿四筛——对于讨论使用c++语言筛取素数的创新

ADS学习笔记 1. 功率放大器设计 基于ADS2023 update2的学习笔记1.功率放大器设计 阅读详情

一.引言:
让我们列举以下100以内的素数:

2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97

除了2和3以外,我们可以发现这样一个规律——其实每一个素数都可以表示为含有2和3的关系式,比如:

2 = breakI

3 = breakII

7 = 2*3+1;

11 = 2*3*2-1;

13 = 2*3*2+1;

17 = 2*3*3-1;

19 = 2*3*3+1;

23 = 2*3*4-1;

29 = 2*3*5-1;

31 = 2*3*4+1;

37 = 2*3*6+1;

41 = 2*3*7-1;

43 = 2*3*7+1;

47 = 2*3*8-1;

53 = 2*3*9-1;

59 = 2*3*10-1;

61 = 2*3*10+1;

67 = 2*3*11+1;

71 = 2*3*12-1;

73 = 2*3*12+1;

79 = 2*3*13+1;

83 = 2*3*14-1;

89 = 2*3*15-1;

97 = 2*3*16+1;

如果拓展到n
那就是
I:
(n + 1) % 6 == 0;
II:
(n - 1) % 6 == 0;

二.总结:
总结一下:除了2和3外,其余素数都与6的倍数相邻,这些素数都满足6n±1,也就是说这些素数都分布在6的倍数的邻数上。总结为一句话:大于等于5的质数一定和6的倍数相邻。例如:5、7, 11、13、17等。但是与6的倍数相邻的不一定是素数,有可能是6倍邻数的倍数,例如25、35、49,这些数就分别是5,7的倍数。

所以:这是个trivial的素数分布特征,因模6的余数中只有1和5与6互素,故从5开始的素数必与6的倍数相邻。

三.证明:
如何从数学的角度进行证明?

我们不难发现,对于一列公差为1的数,我们可以任意的对其分割周期

所以说我们的递归边界为2和3(即上列举数字时的break I和break II),那也就是下一次的周期应该是2*3=6。

一般的

就会有6n,6n+1,6n+2,6n+3,6n+4,6n+5,6n+6(其实就是6n)

我们来看

6n,6n+2,6n+4,6n+6一定为偶数,所以不是素数

同样6n+3也一定是3的倍数

所以只剩下了6n+1和6n+5

想一个例外:

6n+5可能是5的倍数怎么办?(如35)

所以说满足6n+1或6n-5的数和一个数是素数是必要不充分条件

所以,我错了嘛?

没有,既然如此,在循环里去除就行了

或者说,在我们遍历6n+1和6n+5时只需要额外的操作一下就可以了,例如2*3*4+1=25,但是25并不是素数

相似的,还有2*3*6-1=35,2*3*8+1=49

那么这些数满足什么式子呢?

不难发现,这几个数都是(6m±1)*(6n±1);的形式

所以在循环里只需要排除掉就可以了

如此,定义一个flag,在满足上列条件时flag = false;

所以接下来就是设计代码了:

第一步:先判断是否为6倍邻数,如果是则执行第二步;
第二步:判断这个数是否为6倍邻数的倍数以及是否满足如上条件,如若不是则这个数为素数

得证!

代码
#include<bits/stdc++.h>//万能头文件库,源代码的形式
 
using namespace std;//启动内存
 
bool check(long long n)//定义函数check,bool意为这个函数的返回值只有true或false
 
{
 
    if (n == 1)
 
        return false;
 
    else
 
if (n == 2 || n == 3)
 
        return true;
 
    else
 
if (n % 6 != 1 && n % 6 != 5)
 
        return false;
 
    for(int i = 5;i <= sqrt(n);i += 6)
 
    {
 
        if (n % i == 0 || n % (i + 2) == 0)
 
            return false;
 
    }
 
    return true;//判断条件
 
}
 
int main()
 
{
 
    long long min,max;//定义变量long long型,确定判断范围
 
    long long sum = 0;
 
    cin >> min >> max;//输入
 
    for(int i = min;i <= max;i ++)//循环,从min到max每个判断一遍
 
    {
 
        if(check(i) == true)//如果为true为素数
 
        {
 
            cout << i << " ";//输出素数
 
            sum ++;//累加器自+1sum ++ 等价于sum = sum + 1
 
        }
 
    }
 
    cout << sum;//输出一共有几个
 
    return 0;//结束程序
 
}//一个=是复制,两个=(==)是相等

总结
时间复杂度

应该是O(n^3/2)

在100000000时比欧拉筛慢1-2秒,但是结果符合,所以应该没有什么问题。

所以优点就是易于理解,然后缺点就是代码会慢。

注释
素数:即质数,即最大公约数只有自己和1的数

Trivial:平凡,在“关于双周期函数的第二篇论文(Deuxième mémoire sur les fonctions doublement périodiques)”中,<<纯粹与应用数学杂志>>(Journal de Mathématiques Pures et Appliquées),tom.xix.(1854年),第193-208页,Cayley写道,“我首先假设 2k + 1 等于 1,这个变换可以说是平凡的。” [我首先假设 2 k + 1 可能等于 1,这是一种可以称之为“平凡”的变换(I first suppose that 2k + 1 may be equal to unity, a transformation that one could call “trivial”)。]||例子:我们称齐次线性方程组AX = 0的通解x = 0为平凡解

%:OI术语同数学中mod,意为取余数运算,例如6%2==0

遍历:OI术语是指沿着某条路径,依次对每个数据点均做一次访问

递归:函数的定义中使用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法。描述+边界:例:

Flag:可以理解为标签

时间复杂度:OI术语,衡量一个算法的快慢,一定要考虑数据规模的大小。所谓数据规模,一般指输入的数字个数、输入中给出的图的点数与边数等等。一般来说,数据规模越大,算法的用时就越长。而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数据规模而增长的趋势,即 时间复杂度。

应用:
致谢: www.lib.ox.ac.uk

www.google.com

www.oi-wiki.org

Ubuntu虚拟机磁盘扩容实战:5分钟搞定gparted分区调整(附常见错误修复) 本文详细介绍了在Ubuntu虚拟机中使用gparted工具进行磁盘扩容的实战步骤。针对常见的交换分区阻碍问题,提供了从禁用交换空间、删除旧分区、调整主分区大小到重建交换分区并更新系统配置的完整解决方案,帮助用户在5-10分钟内安全高效地解决磁盘空间不足的难题。 阅读详情

相关推荐

ODS 与模态分析

模态分析不是通过现有的 FRF 来“推测”或“估计”其他模态参数,而是通过测量和分析 FRF 来。

轩辕霸天L 1260

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 239

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1877

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 220

AISHELL-1中文语音数据集实战:从下载到训练你的第一个ASR模型(附完整代码)

本文详细介绍了如何使用AISHELL-1中文语音数据集从数据准备到训练端到端语音识别模型的全流程。AISHELL-1作为国内首个开源的普通话语音数据集,包含178小时高质量录音,适合中文自动语音识别(ASR)系统开发。文章涵盖数据下载、预处理、Conformer-CTC模型训练、评估及优化策略,并附完整代码实现。

garlic的博客 1118

skywalking各项指标说明

skywalking各项指标说明

没有简介 2487

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 391

TI AWR1642实战指南:CCS调试mmWave Demo Visualizer全流程解析

本文详细解析了TI AWR1642开发板的CCS调试流程,重点介绍了mmWave Demo Visualizer的使用方法。从环境准备、版本确认到bin文件烧录、CCS工程配置,再到调试启动与结果验证,提供了全流程的实战指南,帮助开发者快速掌握AWR1642的调试技巧,避免常见错误。

weixin_30790841的博客 111

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 336

Transformers在自动驾驶领域的应用(High-level like in scene)

Transformers uses global attention mechanism to capture long-range interaction information. Two core modules in Transformers are Self-Attention and Cross-Attention, which defined asAttn(Q,K,V)=softmax(QK⊤dk)VSelfAttn(X)=Attn(WQX,WKX,WVX)CrossAttn(X,Y)=Attn

qq_39337332的博客 1775

基于加速科技ST2500的SN74HC00N芯片测试计划

实际上随着工艺的进步,器件内部和引脚间的绝缘氧化膜越来越薄,导致漏电流发生的概率更大,另外制造过程中的工艺缺陷导致的桥接,异物或封装过程中造成的芯片划伤、引裂,都会造成IC的漏电流偏大,有部分产品可能会表现出漏电流偏大,但功能正常,此类产品具有潜在的可靠性问题,漏电流测试的目的就是把具有此类缺陷的产品筛选出来,避免其流到最终产品造成更大的损失。漏电流的测试方法相对简单,就是根据产品手册或测试规范对被测引脚施加额定的电压,然后测量其输入或流出的电流是否符合相应的设计规范。74HC00引脚功能如表所示。

weixin_68288412的博客 1437

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 343

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 382

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 304

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 437

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)

数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。

lwq20051110的博客 203

【C++】【STL】string_OJ题

本文总结了9道C++ STL中关于string的OJ题目,按操作类型分为三组:反转与就地修改(如917、541、151)、计数与查找(如387、125、58)、模拟与大数运算(如415、43、8)。核心技巧包括双指针收敛、字符分类处理、进位控制及边界值处理。所有题目使用同一套源码,在标准库std::string与自定义容器MyString间切换仅需宏定义,验证结果一致性。代码通过随机测试用例与Trace函数逐行比对,确保逻辑正确性,强调接口对齐的重要性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 4371

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 366

【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针

C++类与对象知识(面向过程和面向对象的初步认识,类的初步认识,类的访问限定符及封装,类的作用域、实例化,类的对象模型,this指针)

2601_96587588的博客 878

【C++ 基础入门】C++继承(下):问题、底层原理与组合

C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)

2601_96587588的博客 771

C++09_vector类复习

本文以10个核心问题为主线,系统解析C++ vector的底层机制:从基本概念、初始化方式、遍历方法,到size与capacity的区别、扩容策略(VS 1.5×,g++ 2×)、reserve与resize差异、中间增删的挪动原理、迭代器失效原因,直至二维vector的内存布局(含三指针结构)。通过“先会用、再懂扩容、最后看清对象结构”的递进逻辑,揭示vector作为动态数组的本质——连续内存、自动扩容、随机访问高效,但插入删除代价高,迭代器易失效。全文深入浅出,助读者摆脱“黑盒”认知,真正掌握其内存图景

lemo_n_的博客 337

cargo bench 快速上手

是 Rust 内置的基准测试命令,用于。不过,Rust 标准库的#[bench]属性目前仅在版本可用,因此在稳定版(stable)上,社区标准做法是使用框架。

Doublelv 的博客专栏。 339

C++零基础入门第3周:if/else、switch、for/while/do-while 控制流完全指南(附20段可运行代码+避坑清单)

第3周 · 控制流1. 分支:if/else2. 分支:switch3. 循环:for4. 循环:while / do-while5. 范围 for(C++11)6. 跳转:break/continue/return/goto7. 现代 C++ 分支特性避坑:悬空 else / 浮点比较避坑:忘 break / 作用域避坑:边界 off-by-one避坑:do-while 至少执行一次避坑:遍历时修改容器避坑:goto 破坏结构if constexpr / if consteval本周项目:猜数字游戏 #m

qq_58662768的博客 213

《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试

本文系统完成了Gemini模型通过OpenAI兼容API的接入开发,基于Apifox验证接口规范,设计并实现GeminiProvider类,涵盖初始化、状态检测、全量响应等核心功能。重点处理了代理配置强制校验、Bearer鉴权、JSON序列化与响应解析等工程细节,并通过GTest与CMake完成单元测试,验证链路可用性。项目遵循策略模式,保持与DeepSeek、ChatGPT等模型的统一抽象接口,显著提升SDK可扩展性。

2501_91275995的博客 385

10-01-互操作-C#与C++边界的内存管理

本文深入剖析C#与C++互操作中的内存管理核心问题,涵盖P/Invoke封送机制、内存所有权边界、GC对托管对象的移动风险及固定(Pinning)的性能代价。强调“谁分配谁释放”原则,推荐使用SafeHandle保障异常安全,避免悬垂指针与内存泄漏。提出复制模式优先、零拷贝仅用于性能关键路径的最佳实践,并警示跨平台差异、多线程安全及调试陷阱。最终倡导建立明确的边界协议,实现性能与安全的平衡。

设计 AI 玩游戏🎮 291
上一篇: HL小祭記0221
下一篇: HL祭记汇
MaydayMerlin
博客等级 码龄3年 346粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值