利用miracl库实现Fermat素性检测

本文介绍了如何利用Fermat素性检测算法和miracl库来判断大数的素性。该方法基于Fermat小定理,通过多次随机选取整数进行验证,概率性地确定素数。文章详细阐述了算法步骤,miracl库的配置,以及关键函数的使用,并提供了编程实现和运行效果的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fermat素性检测是一种建立在Fermat小定理之上、针对大数的素性检测方案。它虽然能准确地判断“合数”,却无法保证“素数”结论的颠扑不破,换言之,对于“素数”的判断是概率性的。

用到的工具:VS2017、C语言大数库Miracl_5.5.4。

一、Fermat素性检测算法介绍

重要参数:待测大数m(从文件输入),安全参数k(从控制台输入)。
按如下步骤进行检验:

  1. 随机选取整数a,且a大于等于2,小于等于m-2。
  2. 计算a和m的最大公因数g。如果g不等于1(a和m不互素),判断m为合数并退出;否则转到第三步继续判断。
  3. 验证a和m是否满足Fermat小定理的要求。令r=am-1(mod m),若r不等于1,则违背了Fermat小定理,确定m为合数。否则m可能为素数。
  4. 重复k次。若最终m仍可能为素数,则其概率为1-1/(2k

二、miracl环境配置

参考链接:miracl库下载以及配置
前人栽树:很多同学调试时可能会遇到lib库无法正常载入的情况,有可能是文件名后缀的问题,你把cpp改为c后缀试试。
博主在这里栽了两个小时,呜呼哀哉,呜呼哀哉!!!

三、miracl基本函数

参考链接:miracl基本函数介绍
我们要用到的函数mirsys(初始化miracl内存空间)、mirvar(big数初始化)、cinnum(大数的输入)、cotnum(大数的输出)、decr(大数与int数相减)、bigrand(生成随机big数)、egcd(计算两个大数的最大公因数)、compare(比较两个大数的大小)、powmod(计算大数之间的指数次方模值,如am-1(mod m))、mirexit(清理miracl内存空间)。

四、编程实现

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include "miracl.h"

int main()
{
   
   
	int k;
	FILE *fp = NULL;
	char fileName[80];
	double probability = 0;
	miracl *mip = mirsys(500,10); //初始化miracl系统
	big m = mirvar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值