Witness算法
- 格式:doc
- 大小:119.56 KB
- 文档页数:7
目录:一、Witness 软件简介1、系统仿真技术2、Witness应用领域3、Witness主要功能4.使用Witness的收益二、Witness 提供的模块三、Witness应用案例举例1、Witness各种领域的应用实例1-1、Witness在“公共服务”领域的应用1-2、Witness在“生产制造”领域的应用1-3、Witness在“能源工业”领域的应用1-4、Witness在“航空航天”领域的应用1-5、Witness在“医药化工”领域的应用1-6、Witness在“国防科技”领域的应用1-7、Witness在“呼叫中心”领域的应用2、应用模型举例(图)2-1、工厂规划模型2-2、呼叫/访问中心模型2-3、制造维护模型2-4、订货/储运模型2-5、飞机备件供应模型2-6、库存模型2-7、港口模型2-8、供应链模型2-9、公交车站模型3、如何建立模型举例3-1、交通控制仿真案例3-2、机场仿真模型案例3-3、家电维修部人力资源配置仿真模型3-4、医院病床数与服务水平优化仿真模型3-5、混流生产系统建模与仿真模型3-6、钢材配送供应链模型4、典型项目应用实例4-1、社区的警力配备与犯罪的预防控制4-2、Witness帮助改进Heathrow机场4-3、在银行、保险、金融中的应用4-4、在金融部门的业务咨询3-5、在日本尼桑汽车中的仿真生产的改进4-6、Witness在零售业的应用4-7、在Exxon航运分配的改善4-8、“空中客车”大型客机设计四、Witness中国部分用户1、Witness中国部分用户2、Witness国外部分用户附:生产系统场景虚拟现实软件简介L一、Witness 软件简介Witness就是由英国 lanner公司推出的功能强大的仿真软件系统。
它可以用于离散时间系统的仿真,同时又可以用于连续流体(如液压、化工、水力)系统的仿真。
目前已被成功运用于国际3000 多家知名企业的解决方案项目,如Airbus 公司的机场设施布局优化、BAA 公司的机场物流规划、BAE SYSTEMS 电气公司的流程改善、Exxon 化学公司的供应链物流系统规划、Ford 汽车公司的工厂布局优化与发动机生产线优化、Trebor Bassett 公司的分销物流系统规划等。
0引言部分可观察马尔可夫决策过程 (partially observable Markov decision processes , POMDP 描述的是当前世界模型部分可知的情况下,智能体 Agent Agent 的例如, 足球运动员在球场上踢足球, 每个球员并不完全清楚他周围的所有状态, 当他向前带球的过程中, 他可能知道在他前面人的位置和状态, 但是可能不知道在他后面的其他队友的位置和状态, 此时他观察到的信息是不完整的, 但是一个优秀的足球运动员往往靠着一种感觉传给他身后的最有利的队员, 使其进行最有利的进攻,过程就是部分可观察马尔可夫决策过程。
在部分可感知模型中, 不仅要考虑到状态的不确定性, 同时还要考虑到动作的不确定性,这种世界模型更加能够客观的描述真实世界, 因此应用十分广泛。
本文综述了目前在 POMDP 领域的研究情况, 介绍了 MDP 的数学理论基础和决策模型, 以及一种典型的 POMDP 决策算法-值迭代算法, 介绍了目前现有的几种经典的决策算法, 并分析它们之间的优点和不足, 列举了一些 POMDP 常见的应用领域, 并进行了总结和展望。
1马尔可夫决策过程Agent 每一个时刻都要做一些决策, 做决策时不仅要考虑甚至是其它 Agents (Markov decision process , MDP 的最优解, MDP 可以用一个四元组<, >来描述 [1]::Agent的行为集;, :×:当 Agent在状态 ,可能转移到状态的概率,使用 |:→ 情况下采用动作-2116--2117-, Agent 使 Agent 选择的动作能够获得在 MDP 模型中, Agent在为折扣因子,其目标是让期望值有界(1由于 MDP 决策过程中, 要同时考虑世界模型的不确定性和目标的长远性,需要在策略时刻,状态的情况下,值函数构造如下=,=,*,也就是 Agent 每个时刻都能做到的最优决策, 根据 Bellman最优策略公式可以得到。
区块链技术的共识算法介绍区块链技术是一种分布式的数据库技术,被广泛应用于加密货币以及其他领域。
共识算法是区块链技术中至关重要的一部分,它解决了在分布式环境下如何达成一致的问题。
本文将对区块链技术中常见的共识算法进行介绍,并分析它们的优缺点。
一、工作量证明(Proof of Work,PoW)工作量证明是比特币中使用的共识算法,也是目前最为广泛使用的共识算法之一。
在PoW中,网络参与者(矿工)通过解决数学难题来获得记账的权力。
解决难题需要消耗大量的计算能力,因此具有一定的安全性,使得恶意节点难以控制网络。
尽管PoW算法的安全性已经得到了验证,但它面临着能源消耗高、交易确认时间长等问题。
由于计算量大,导致对电力和硬件的需求很高,使得PoW算法在可持续性和环保性方面存在一定的挑战。
二、权益证明(Proof of Stake,PoS)权益证明是另一种常见的共识算法,相对于PoW来说,PoS更加环保和高效。
在PoS中,记账的权力是根据用户持有的货币数量来确定的。
持有的货币数量越多,就越有可能被选中作为记账节点。
这种算法机制可以减少能源消耗,并提高交易速度。
然而,PoS算法也存在一些问题。
首先,富豪获取更多的权益,导致权力集中化的可能性增加。
其次,在PoS中,如果节点持有的货币被黑客攻击并窃取,那么攻击者将获得更多的权力,从而破坏了区块链的安全性。
三、权益证明+权益共识(Delegated Proof of Stake,DPoS)DPoS是在PoS基础上发展起来的一种共识算法,通过代理选举的方式解决了PoS中权力集中化的问题。
在DPoS中,持币者可以投票选出受托人(Witness),他们负责验证和打包交易,并生成新的区块。
受托人的数量相对较少,从而确保了交易速度和网络安全性。
DPoS算法强调了自治和去中心化,但它也引发了一些争议。
例如,一些人认为DPoS算法在一定程度上牺牲了安全性和去中心化的原则。
此外,由于受托人的选举是根据持有的货币数量来进行的,这可能会导致权力集中的问题。
0引言部分可观察马尔可夫决策过程 (partially observable Markov decision processes , POMDP 描述的是当前世界模型部分可知的情况下,智能体 Agent Agent 的例如, 足球运动员在球场上踢足球, 每个球员并不完全清楚他周围的所有状态, 当他向前带球的过程中, 他可能知道在他前面人的位置和状态, 但是可能不知道在他后面的其他队友的位置和状态, 此时他观察到的信息是不完整的, 但是一个优秀的足球运动员往往靠着一种感觉传给他身后的最有利的队员, 使其进行最有利的进攻,过程就是部分可观察马尔可夫决策过程。
在部分可感知模型中, 不仅要考虑到状态的不确定性, 同时还要考虑到动作的不确定性,这种世界模型更加能够客观的描述真实世界, 因此应用十分广泛。
本文综述了目前在 POMDP 领域的研究情况, 介绍了 MDP 的数学理论基础和决策模型, 以及一种典型的 POMDP 决策算法-值迭代算法, 介绍了目前现有的几种经典的决策算法, 并分析它们之间的优点和不足, 列举了一些 POMDP 常见的应用领域, 并进行了总结和展望。
1马尔可夫决策过程Agent 每一个时刻都要做一些决策, 做决策时不仅要考虑甚至是其它 Agents (Markov decision process , MDP 的最优解, MDP 可以用一个四元组<, >来描述 [1]::Agent的行为集;, :×:当 Agent在状态 ,可能转移到状态的概率,使用 |:→ 情况下采用动作-2116--2117-, Agent 使 Agent 选择的动作能够获得在 MDP 模型中, Agent在为折扣因子,其目标是让期望值有界(1由于 MDP 决策过程中, 要同时考虑世界模型的不确定性和目标的长远性,需要在策略时刻,状态的情况下,值函数构造如下=,=,*,也就是 Agent 每个时刻都能做到的最优决策, 根据 Bellman最优策略公式可以得到。
第6章 WITNESS 建模与仿真过程6.1 WITNESS 建模与仿真过程(1)定义系统元素:可以通过在布置窗口中点鼠标右键,选定快捷菜单中的“define ”菜单项,来定义模型基本元素的名称、类型、数量;(2)显示系统元素:在定义了元素的基础上,要定义元素在各种状态下的现实图形。
本步骤可以通过右击要定义显示特征的元素,通过选定弹出式菜单中的“display ”菜单项,来进行设定。
各种元素的平面布置可以在witness 的布置窗口中设定,也可以通过导入被仿真系统设施布置图的.dwg 文件来设定。
(3)详细定义:本步骤详细定义模型基本元素工作参数以及各元素之间的逻辑关系,如系统结构、被加工对象在各台机器上的加工时间分布、加工对象的工艺路线、以及其他规则等。
可以双击鼠标左键,通过弹出的“detail ”对话框来设定。
(4)运行:通过试运行和修改模型,重复前三步得到正确的计算机仿真模型之后,对系统进行一定时间范围的运行,并在屏幕上动画显示系统运行的过程,运行方式可以是单步的、连续的和设定时间的。
本步骤通过witness 提供的“run ”工具栏来进行操作。
(5)报告:系统运行一段时间后,显示系统中各元素的运行状态统计报告。
通过该报告,可以分析系统中可能存在的各种问题;或通过某项指标,来比较可选方案的优缺点。
如机器的利用率、产品的通过时间、在制品库存等。
该操作通过使用“reporting ”工具栏来实现。
(6)归档:witness 还提供了归档“documentor ”模块,可以让我们提取计算机模型的各种信息,生成word 文档或直接打印出来。
主要是生产报告模块没有包含的有关元素的说明型文字、规则、活动、中断和基本信息。
(7 )优化: witness 还提供了系统优化“optimizer ”模块。
如果一个系统的绩效将因为其构成元素的配置不同,而得到不同的结果,并不需要建立多种配置的计算机模型。
我们可以直接使用同一个计算机模型,然后通过“optimizer ”模块来设定每一元素的可变属性值的取值范围,得到一个取值范围集合,并设定表示绩效的目标函数是取最大值还是最小值,进行优化仿真运行,就可以得到前n 个最优绩效的系统配置(n 可自行设定)。
•软件介绍与安装•基本操作与建模流程•高级功能与应用技巧•案例分析与实战演练目录•故障排查与常见问题解决方案•总结回顾与拓展学习资源Witness仿真软件概述Witness仿真软件是一款功能强大的系统仿真软件,广泛应用于制造、物流、服务等领域。
该软件支持多种仿真方法,包括离散事件仿真、系统动力学仿真等,可满足不同需求。
Witness仿真软件具有可视化界面和丰富的数据分析工具,方便用户进行建模、分析和优化。
安装步骤下载Witness仿真软件安装包;双击安装包,按照提示进行安装;01020304菜单栏工具栏模型窗口属性窗口输出窗口030201建模功能仿真功能界面布局与功能介绍数据分析功能优化功能支持多种优化方法,可帮助用户找到最优解决方案。
在项目浏览器中,右键点击“模型”,选择“导入”,支持导入的模型格式包括.stl、.step、.iges等。
设置模型单位、坐标系和精度等参数,完成模型导入。
打开Witness软件,选择“新建项目”,输入项目名称和保存路径。
创建新项目与导入模型010204绘制流程图及设置参数在项目浏览器中,右键点击“流程图”,选择“新建流程图”。
从左侧工具箱中选择合适的图形元素,拖拽至流程图中,构建仿真逻辑。
双击图形元素,设置其属性参数,如时间、概率、资源等。
使用连接线将图形元素连接起来,表示事件之间的逻辑关系。
03运行仿真并查看结果自定义函数与变量设置自定义函数变量设置函数与变量调试数据分析与可视化呈现可视化呈现数据导出与处理借助图表、图像等可视化手段,直观展示仿真结果和数据分析成果。
结果解读与优化优化算法在仿真中的应用优化算法介绍简要介绍遗传算法、粒子群算法、模拟退火等常用优化算法的原理和特点。
优化算法在仿真中的实施阐述如何将优化算法与Witness仿真软件相结合,实现仿真优化。
优化案例分析通过具体案例,展示优化算法在Witness仿真中的应用效果和价值。
生产线平衡优化案例生产线现状分析01平衡优化方案制定02方案实施与效果评估031 2 3配送中心现状分析规划方案制定方案实施与效果评估物流配送中心规划案例医院排队系统改进案例排队系统现状分析改进方案制定方案实施与效果评估原因分析:可能是软件安装问题、系统兼容性问题、硬件故障等。
1 前言随着经济的发展,人们生活水平的提高,购买能力的不断提高与消费观念的不断改变,零售业拥有巨大的商机,在零售业领域大型超市无疑具有绝对的优势,享受消费者带来的巨大利润;但随着行业的激烈竞争以及消费者的选择机会增多,超市在经营管理方面将面对巨大的挑战。
超市要取得竞争优势就必须努力提高顾客的满意度与忠诚度,不仅超市的选址要合理、商品要种类齐全物美价廉、场所要舒适温馨、服务态度要无微不至,而且不能忽略的是给顾客带来方便,场所过度拥挤以及等待时间太长将影响顾客满意度与忠诚度,势必产生顾客的流失。
利用系统仿真对离散服务系统的研究,可以利用witness仿真软件对现行系统进行同步仿真,评价各个时段的顾客量、顾客在超市中的选物时间、收银台顾客队列的长度以及等待时间、顾客在超市中总的时间以及收银员的利用率等指标来改善超市服务的便利性,以此提高顾客的满意度与忠诚度。
1.1目的意义我国是一个发展中国家,在过去的二十多年里,经济保持了持续快速增长,我国经济的持续稳定增长为消费升级和零售市场的增长提供了有力的支持"作为各种零售业态之一的中小型超市,经历了一个从无到有,从有到逐步发展壮大的过程"如今,中小型超市己成为我国各种零售业中最具活力的商业业态"。
我国经济和社会环境的特殊性,注定了中小型超市被普遍接受和备受欢迎"近年来,中小型超市加快了其占有市场的步伐"近几年,中小型超市的食品销售占市场总销售额的70%日用品占到80%,这有力地说明了中小型超市对居民生活影响之大"。
中小型超市的经营面积和商品价位均处于大型综合超市和便利店之间,从而受到两种业态的/夹击0,由于中小型超市在商品价格!商品种类!购物的便利性等方面均受到限制,在大型综合超市和便利店快速发展的情况下,生存空间被大大压缩"本文属于计算机仿真研究领域,目的就是根据超市的具体情况,应用系统工程的理论与方法,通过实地调研和考查,确定超市系统的基本参数,将超市视为一个大的系统,利用先进的物流建模与仿真软件WITNESS进行超市模型的建立,并对购物篮的配备进行优化分析,确定最佳的购物篮配备数目,在满足顾客等待时间少,减少购物篮配备浪费的要求下,将配备后的结果,同实际运行后的相关参数结合,使之同实际的超市运行相一致,以最经济的配备量完成超市的运行。
定义与发展历程定义Witness仿真系统是一种基于计算机技术的模拟软件,用于对现实世界中的复杂系统进行建模、分析和优化。
发展历程Witness仿真系统起源于20世纪80年代,随着计算机技术的进步和仿真理论的发展,逐渐在各个领域得到广泛应用。
应用领域及价值应用领域Witness仿真系统可应用于制造业、物流业、医疗卫生、城市规划、交通运输等多个领域。
价值通过Witness仿真系统,可以对复杂系统进行全面的分析和评估,帮助决策者制定科学合理的方案,提高系统运行效率和质量。
系统架构与组成系统架构Witness仿真系统采用模块化设计,包括建模模块、仿真模块、分析模块和优化模块等。
组成Witness仿真系统主要由用户界面、仿真引擎、数据库和模型库等部分组成。
其中,用户界面提供友好的操作环境,仿真引擎负责模型的运行和数据的处理,数据库用于存储仿真数据和结果,模型库则提供丰富的预设模型和案例供用户参考和使用。
01支持多种建模方式提供图形化建模、文本建模等多种方式,满足用户不同需求。
02丰富的模型库内置大量常用模型,方便用户快速构建仿真系统。
03高精度仿真算法采用先进的仿真算法,确保仿真结果的准确性和可靠性。
建模与仿真03提供多种数据分析工具,支持对仿真数据进行深入挖掘和分析。
强大的数据分析功能内置多种优化算法,可帮助用户找到系统性能瓶颈并进行优化。
优化算法集成支持对模型参数进行灵敏度分析,帮助用户理解参数变化对系统性能的影响。
灵敏度分析数据分析与优化丰富的可视化效果提供多种可视化展示方式,如2D/3D 图形、动画等,使仿真结果更加直观易懂。
交互式操作界面支持用户对仿真系统进行交互式操作,如调整参数、改变模型结构等。
实时数据更新在仿真过程中,支持实时更新数据和可视化效果,方便用户观察系统状态变化。
可视化展示与交互03020101提供丰富的API 接口,支持用户进行二次开发和自定义扩展。
开放的API 接口02支持多种编程语言接口,方便用户根据自身需求选择合适的开发语言。
韦伯斯特算法引言概述:韦伯斯特算法是一种用于文本分析和信息检索的算法。
它通过将文本转化为向量表示,并计算向量之间的相似度来实现对文本的分类和搜索。
本文将对韦伯斯特算法进行详细介绍,并从五个大点进行阐述。
正文内容:1. 算法原理1.1 文本向量化:韦伯斯特算法将文本转化为向量表示,其中每个维度代表了一个特定的特征或词汇。
这样可以将文本转化为数值形式,方便计算相似度。
1.2 向量相似度计算:韦伯斯特算法使用余弦相似度来计算向量之间的相似度。
余弦相似度通过计算两个向量的夹角来衡量它们之间的相似程度,数值越接近1表示越相似。
2. 文本分类2.1 训练集构建:韦伯斯特算法需要通过训练集来学习文本的特征和分类。
训练集包含了已经标注好的文本样本,用于算法的学习和训练。
2.2 特征选择:在训练集构建过程中,韦伯斯特算法需要选择合适的特征来表示文本。
特征选择的好坏将直接影响算法的性能。
2.3 分类器训练:通过训练集的样本和特征选择,韦伯斯特算法可以训练一个分类器模型。
该模型可以根据新的文本样本,对其进行分类。
3. 文本搜索3.1 查询向量化:在文本搜索中,韦伯斯特算法将查询文本也转化为向量表示。
这样可以将查询文本与已有的文本进行相似度计算。
3.2 相似度匹配:通过计算查询向量与已有文本向量的相似度,韦伯斯特算法可以找到与查询文本最相似的文本。
3.3 搜索结果排序:根据相似度计算的结果,韦伯斯特算法将搜索结果进行排序,将最相似的文本排在前面,提供给用户最相关的搜索结果。
4. 应用领域4.1 文本分类:韦伯斯特算法在文本分类领域有广泛的应用,可以用于新闻分类、情感分析等任务。
4.2 信息检索:韦伯斯特算法可以用于构建搜索引擎,提供准确的搜索结果。
4.3 自然语言处理:韦伯斯特算法可以用于处理自然语言文本,提取关键词、实体识别等任务。
5. 算法优化5.1 特征工程:通过选择更好的特征和特征组合方式,可以提升韦伯斯特算法的性能。
wknn算法公式WKNN(Weighted k-Nearest Neighbor)算法是一种基于KNN(k最近邻)算法的改进版本。
WKNN算法在计算样本间的距离时,引入了样本权重因子,用于平衡不同样本之间的差异,从而提高分类的准确性。
WKNN算法的公式如下:1.数据预处理:首先,对样本数据进行预处理,包括数据清洗、特征选择和特征归一化等操作。
数据清洗是为了去除噪声数据和无效数据,特征选择是为了选取对分类有重要影响的特征,特征归一化是为了将各个特征的取值范围统一化,避免一些特征对结果的影响过大。
2.计算相似度:对于待分类的新样本,首先计算其与训练集中各个样本的相似度。
相似度可以使用欧氏距离、余弦相似度等度量方式进行计算。
假设训练集中的第i个样本为Xi,待分类样本为X,相似度计算公式可以表示为:sim(X, Xi) = f(X, Xi)其中,f(表示相似度计算函数,可以根据具体的问题和数据特点进行选择。
3.权重计算:在WKNN算法中,每个样本都会被赋予一个权重值,用于衡量该样本对分类判断的贡献程度。
权重可以根据相似度的大小进行分配,也可以根据样本的重要性进行分配。
一般来说,相似度越大、距离越近的样本,其权重越大。
权重计算公式可以表示为:weight(X, Xi) = g(sim(X, Xi))其中,g(表示权重计算函数,可以根据具体的问题和数据特点进行选择。
4.K值选择:在KNN算法中,K值表示选择距离待分类样本最近的K个样本作为最终的判定依据。
对于WKNN算法而言,K值的选择也是一个重要的问题。
一般来说,K值应该根据具体问题和数据特点进行选择,可以通过交叉验证等方法来确定。
5.分类决策:最后,根据找到的K个最近邻样本的权重,通过加权投票的方式进行分类决策。
权重越大的样本对分类结果的贡献越大,可根据权重对不同类别进行计数,最终选择权重最大的类别作为待分类样本的分类结果。
总结起来,WKNN算法通过引入样本权重因子,对KNN算法进行改进,提高了分类的准确性。
《应用密码学》课程论文
论文题目: WITNESS算法
姓名:
学号:
专业班级:
联系电话:
2014年10月
WITNES算法
一、算法原理
在实现RSA密码体质的过程中,为使RSA安全,我们需要找到足够大的素数,使其在运算上相当困难。
如何判断一个奇整数n是否是素数呢?这里就需要用到Miller和Rabin提出的WITNESS算法。
在介绍WITNESS算法之前,先介绍两个相关的定理。
Fermat定理:假如a是整数,p是素数,且a,p互质(即两者只有一个公约数
1),那么a的(p-1)次方除以p的余数恒等于1,即a p-1≡1(mod p)。
二次探测定理:如果x是整数,p是素数,且0<x<p,则方程x2≡1(mod p)。
的解为:x=≡1(mod p)或者x≡-1(mod p)。
这两个定理的证明可以参考应用密码学和数论的相关书籍。
下面介绍WITNESS。
WITNESS算法思想:当n 是一个大奇数时,(n-1)是偶数,可表示为2的某次幂与一个奇数的乘积,即(n-1)=2k* q,(k>0,q为奇数),也就是用2除(n-1),直至所得结果为奇数,共做了k次除法。
选一个整数a,0<a<n-1,计算幂序列模n
的余数a q,a2 *q,…,,若n是素数,则序列的第一个元素为1,或该序列中
某元素为n-1。
其理论基础就是上面提到的Fermat定理和二次探测定理。
具体实现可以参考下面的流程框图和用C语言实现的代码。
二、算法实现
1.流程框图
2.代码
/*WITNESS算法思想:
(n-1)是偶数,可表示为2的某次幂与一个奇数的乘积,(n-1)=(2^k) * q,k>0,q为奇数;即用2除(n-1),直至所得结果为奇数,共做了k次除法;
选一个整数a,0<a<n-1,计算幂序列模n的余数a^q ,a^(2 *q) , …, a^((2^k) *q);若n是素数,则序列的第一个元素为1,或该序列中某元素为n-1;
*/
# include <stdio.h>
# include <stdlib.h>
# include <conio.h>
# include <time.h>
int judge( int k, long long int n, int a, int b[]);
void main(){
long long int n;//待测数据n
int *b = 0;// n - 1 的2进制表示
int length = 0;//n - 1的2进制数的长度
int *a = 0;//储存随机数的一个数组
int length_s;//随机数组中随机数的个数
int flag;//标志位,0可能为素数,1 一定是合数
int count;//计数时用的变量
//输入待测数据以及范围界定
printf("请输入需要测试的数n ( 1 < n < 18446744073709551616,共20位) :");
scanf("%lld", &n);
while(n <= 1 || n >= 18446744073709551615){
printf("输入越界,请重新输入需要测试的数n ( 1 < n < 18446744073709551616 ,共20位) :");
scanf("%lld", &n);
}
//输入随机数组的长度s
printf("输入随机数组成的数组的长度length_s 的最大值(1 < length_s <= 100) :");
scanf("%d", &length_s);
while( length_s <= 1 || length_s > 100){
printf("输入错误,请重新输入随机数组成的数组的长度length_s 的最大值(1 < length_s <= 100) :");
scanf("%d", &length_s);
}
//对输入的数据进行判断
if( n == 2 ){//输入2
printf("输入的数%d为素数,按任意键退出", n);
getch();
exit( 0 );//退出
}
else if( n % 2 == 0 ){ //大于2的偶数
printf("输入的数%d是合数,按任意键退出", n);
getch();
exit( 1 );//退出
}
else{//大于2的奇数
//产生随机数
srand(( unsigned int )(time( NULL )));
a = (int *)malloc( length_s * sizeof( int ));//生成储存随机数的数组
for( count = 0; count < length_s; count ++){//将随机数储存在数组中
a[count] = rand() % ( n - 2 ) + 2;//随机数范围[2,n - 1]
//printf("a[%d] = %d\n", count, a[count]);
}
}
//用b k b k-1…b0来表示(n-1)的二进制,b k b k-1…b0分别表示数组b的最末尾到最开始的数字
int temp = n - 1;
//计算temp表示成2进制后的位数
while( temp != 0 ){
temp = temp / 2;
length ++;
}
b = ( int *)malloc( length * sizeof( int ));//生成储存temp的二进制的数组
count = 0;
temp = n - 1;
while(temp != 0){//将temp的二进制数储存在数组中
b[count] = temp % 2;
// printf("b[%d] = %d\n", count, b[count]);
temp = temp / 2;
count ++;
}
//取不同的随机值a[count]进行测试
for( count = 0; count < length_s; count ++){
flag = judge( length - 1, n, a[count], b);
if( flag == 1){
printf("输入的数%d是合数,按任意键退出", n);
getch();
exit( 3 );
}
}
free( b );
free( a );
printf("通过测试,按任意键退出\n");
getch();
}
int judge( int k, long long int n, int a, int *b){
long long int d = 1;
int i;
long long int x;
for( i = k ; i >= 0; i --){
x = d;
d = ( d * d ) % n;
if( d == 1 && x != 1 && x != n - 1 ){
return 1;//合数
}
if( b[ i ] == 1 ){
d = ( d * a ) % n;
}
}
if( d != 1){
return 1;//合数
}
return 0;//可能为素数
}
3.实验结果
2999951素数
2999953合数
2999957素数
三、算法分析
从上面的分析可以知道,Miller-Rabin算法只是一个概率算法,在满足某些条件的情况下,我们可以判断输入的待测试的数据为合数;在不满足该条件时,待测数据可以通过测试,则可能为素数。
在每次测试都通过的情况下,测试的次数越多,是素数的概率越高。
如果测试s次都通过了,则这时n是素数的概率为(1 - 2-s)。
算法的操作集中于循环中,最坏情况是两重循环都没有中途退出,则s轮Miller-Rabin算法的最坏情况时间复杂度为O(lg n)。