费马小定理在素数检测中的应用

news/2025/11/20 20:29:17/文章来源:https://www.cnblogs.com/yanshangluobai/p/19249489
因为还没用过liux的编译环境,我这两天便寻思着在Windows上搭建一个scheme的编译环境。查阅了各路大神的搭建方式,最终选择在VSC上进行编译,不过整了两天只能说勉强能用。只有编译功能,无法debug也没有调试,而且最奇怪的是只能在终端上进行运行,编译界面的主要作用只有关键词联想和补括号,可有可无。但是各路大神的教程内容里似乎都可以正常编译,我只在reddit上看到和我有同样疑问的一位朋友,最新的解答也是只能在终端界面进行编辑。不知道是否有相同疑问的朋友,我的水平有限,还烦请解答一下该问题。
言归正传,这次学习的内容关于素数检测,其中对费马小定理进行了应用(如果n是一个素数,a是小于n的任意正整数,那么a的n次方与a通模n同余),那么理论上只要使用足够多的a<n,就能比较有把握的判断一个数是否为素数,有点类似蒙特卡洛算法。为了实现费马检测,我们需要下列过程。
点击查看代码
; 一个数的幂对另一个数的取模过程
(define (expmod base exp m)(cond ((= exp 0) 1 )((even? exp)(remainder (square (expmod base (/ exp 2) m)) m ))(else (remainder (* base (expmod base (- exp 1) m)) m ))))
; 定义平方,方便减少幂运算的步数
(define (square n)(* n n))
; 判断偶数,作用同上一步
(define (even? n)(= (remainder n 2) 0 ) )
; 费马检测过程,随机数a来源于1到n-1,这里通过random函数实现
(define (fermat-test n)(define (try-it a)(= (expmod a n n) a ))(try-it (+ 1 (random (- n 1)))))
; 这里规定一定次数的检测,次数耗尽如果没找到反例则有较大把握确认目标为素数
(define (fast-prime? n times)(cond ((= times 0) (display "true"))((fermat-test n) (fast-prime? n (- times 1)))(else (display "false"))))

相较于从2开始挨个试验是否能够整除的素数检测方式,费马检测在步数上的增长阶为log n,空间上几乎为1,因为取决于我们所规定检测数字数量。相较于传统的开方成长阶,有一定的资源优势。

后续的练习题中涉及到了runtime,通过编译过程的耗时来直观体现步数和空间的资源消耗。可惜当前的编译环境(见文章开头)不支持,故这部分习题无法很好解答。

习题1.28中增加了费马小定理的改进版,MR检查,是费马小定理的一个变型,其核心为:如果n是素数,对于任何小于n的整数a,则a的(n-1)次幂与1模n同余。但题目要求通过非平凡平方根的存在证明n是否为素数。

点击查看代码
(define (square n)(* n n))
(define (even? n)(= (remainder n 2) 0 ) )
(define (expmod base exp m)(cond ((= exp 0) 1 )((even? exp)(com (expmod base (/ exp 2) m) m ))(else (remainder (* base (expmod base (- exp 1) m)) m ))))
(define ( com x m )(define (deal rem)(if (= rem 1)0rem ))(cond ((= x 1) 1)((= x (- m 1)) (remainder (square x)m))(else (deal (remainder (square x) m )))))
(define (MR-test n base)(cond ((= base 1) 1)((= (expmod base n (+ n 1)) 1 ) (MR-test n (- base 1)))(else 0)))
(define (fast-prime? n base)(MR-test (- n 1) base))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/971402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把 1688 商品详情「搬进 MySQL」:Java 爬虫全链路实战(2025 版) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:从传统架构到云原生,如何应对数据增长挑战?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

50036_基于微信小程序的智能点餐推荐系统

1.项目包含 项目源码、项目文档、数据库脚本、软件工具等资料; 带你从零开始部署运行本套系统。 2.项目介绍 本文设计并实现了一个外卖点餐小程序,融合了传统的餐饮外卖管理与计算机技术,实现外卖业务的高效科学管理…

【NAOI】题解

【NAOI】真的是签到题吗 背景 OI不能没有签到题,就像 \(309\) 不能没有数据删除! 题目描述 有 \(T\) 组询问,每组问题如下: 是否存在 \(3\) 个长度为 \(n\) 的 \([0,n)\) 的排列 \(a,b,c\),使得 \(a_i+b_i=c_i\mod…

Windows系统基础安全浅谈

依照中华人民共和国安全法任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安…

深入解析:医疗多模态共情推理与学习一体化网络Python实现(2025扩充版)

深入解析:医疗多模态共情推理与学习一体化网络Python实现(2025扩充版)2025-11-20 20:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…

curl/libcurl SMTP CRLF注入漏洞深度分析

本文详细分析了curl/libcurl中存在的SMTP CRLF注入漏洞,攻击者可通过在MAIL FROM/RCPT TO参数中插入CRLF字符注入任意SMTP命令,导致未授权邮件拦截、信息泄露等严重安全问题。SMTP CRLF Injection in curl/libcurl v…

2025年11月氨基酸水溶肥,花芽分化氨基酸水溶肥,低温酶解氨基酸水溶肥厂家最新推荐,权威测评与种植选择指南!

2025年11月氨基酸水溶肥及相关产品权威测评与选择指南在农业领域,肥料的选择至关重要,尤其是氨基酸水溶肥,在花芽分化等关键时期起着关键作用。深圳惠民皓天生态科技有限公司成立于2017年,是一家专注于“互联网 + …

2025年11月沣硕40+中微量元素水溶肥,防裂果中微量元素水溶肥,促花稳果中微量元素水溶肥厂家推荐:规模化种植适配品牌

2025年11月:沣硕40+中微量元素水溶肥助力规模化种植在农业现代化的进程中,中微量元素水溶肥对于作物的生长和品质提升起着至关重要的作用。尤其是在预防裂果、促花稳果等方面,优质的中微量元素水溶肥更是成为了规模…

4.6.4版本闪亮登场~赶快了解一下新内容吧

产品更新概览 功能修复: 修复数据页面横向滚动条显示问题; 修复全屏项目的轮播控制问题; 修复表格组件首行选中问题; 修复PDF组件读取在线文件问题; 修复菜单组件隐藏误触发交互问题; 修复时间选择器组件显示问题…

2025年11月花芽分化氨基酸水溶肥,膨果上色氨基酸水溶肥,高含量氨基酸水溶肥厂家推荐,实测促产效果与品牌解析!

2025年11月花芽分化与膨果上色:氨基酸水溶肥厂家深圳惠民皓天生态科技解析在农业种植领域,花芽分化期与膨果上色期对于作物的产量和品质至关重要。合适的氨基酸水溶肥能为作物提供关键营养,助力其茁壮成长。深圳惠民…

XMind for Mac v24.01.dmg 安装教程(Mac思维导图软件下载安装步骤)

XMind for Mac v24.01.dmg 安装教程(Mac思维导图软件下载安装步骤)​ 1. 下载文件安装包下载:https://pan.quark.cn/s/5f9d7a340ac8 ,先找到你下载的 XMind for Mac v24.01.dmg文件(通常在「下载」文件夹里)。2.…

自动类型推导、智能指针、Lambda表达式和函数包装器 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

FPGA中,“按键控制LED灯实验”学习中常见问题、解除思路和措施以及经验总结!!!(新手必看)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

RocketMQ 概念介绍 - 邓维

RocketMQ概念介绍RocketMQ 概念介绍1、消息队列使用场景介绍解耦:如果服务 A 调用服务 B 时是同步依赖,那么 B 服务压力过大可能导致整个系统链路阻塞。流量削峰填谷:高并发场景下(如电商秒杀),直接将请求打到数…

es的sql语句 有哪些限制

ES(Elasticsearch)的SQL语句虽然提供了类似于传统关系型数据库的查询功能,但仍存在一些限制。以下是一些主要的限制:语法差异:ES的SQL语法与传统的SQL有所不同,可能需要一些学习和适应。例如,ES使用SELECT语句来…

fio linux

fio(Flexible I/O Tester)是一个用于测试存储设备性能的工具,常用于评估SSD、HDD、NVMe等存储设备的读写性能。它支持多种I/O操作模式,包括随机读、随机写、顺序读、顺序写等,适用于Linux系统。一、fio 的基本用途…

find linux 文件

在 Linux 系统中,find 是一个非常强大的命令行工具,用于在文件系统中搜索文件和目录。它可以根据不同的条件(如文件名、大小、权限、时间等)来查找文件。一、基本用法find [路径] [选项] [表达式]1. 基本搜索文件f…

Docker主机网络优化咋做

Docker主机网络优化可以通过多种策略来实现,以提高容器之间的通信效率和应用性能。以下是一些有效的优化方法: 使用Host网络模式优势:容器直接使用宿主机的网络堆栈,减少网络层的开销,适合高性能场景。 注意事项:…

C语言小程序在日常生活中的应用实例

C语言小程序在日常生活中有许多实际应用,以下是一些具体的实例:家庭财务管理:可以使用C语言编写一个简单的家庭财务管理程序。该程序可以记录家庭的收入、支出、储蓄等财务信息,并提供查询、统计和分析功能。通过该…