Fermat素性检验算法的C语言实现(基于Miracl大数运算库)

本文介绍了如何使用C语言结合Miracl大数运算库实现Fermat素性检验算法。通过随机选取整数、计算最大公约数和模幂运算等步骤,对奇整数进行素性判断。同时提供了相关函数的说明,并给出样例数据的测试结果,强调了源代码需在Visual Studio中配置Miracl库才能运行。
摘要由CSDN通过智能技术生成

实验环境

Windows 10,Visual Studio 2019,Miracl大数库

背景及原理

Fermat小定理

给定素数 𝒑,𝒂 ∈ 𝒁,则有 a^(p-1) ≡ 𝟏(𝒎𝒐𝒅 𝒑)
如果有一个整数𝒂 ,( 𝒂, 𝒎 )= 𝟏,使得 a^(m-1) ≢ 𝟏( 𝒎𝒐𝒅 m)
则m一定是一个合数
如果有一个整数𝒂 ,( 𝒂, 𝒎 )= 𝟏,使得 a^(m-1)≡ 𝟏 (𝒎𝒐𝒅 m)
则m是素数或伪素数

引理

奇整数𝒎,若任取一整数 𝟐 ≤ 𝒂 ≤ 𝒎 − 𝟐,( 𝒂, 𝒎 )= 𝟏, 使得a^(m-1)≡ 𝟏 𝒎𝒐𝒅 𝒎 ,则 𝒎 至少有1/2的概率为素数

Fermat素性检验算法

给定奇整数 𝒎 ≥ 𝟑 和安全参数 𝒌
(1) 随机选取整数𝒂 ,𝟐 ≤ 𝒂 ≤ 𝒎 − 𝟐
(2) 计算𝒈 =( 𝒂, 𝒎 ),如果 𝒈 = 𝟏,转(3);否则,跳出, 𝒎 为合数
(3) 计算 𝒓 = 𝒂^𝒎−𝟏 𝒎𝒐𝒅 𝒎 ,如果 𝒓 = 𝟏,𝒎 可能是素数,转(1);否则,跳出, 𝒎 为合数
(4) 重复上述过程 𝒌 次,如果每次得到 𝒎 可能为素数,则 𝒎 为素数的概率为 𝟏 – 1/2^k

Miracl大数运算库相关函数

函数原型: miracl *mirsys(int nd, int nb);
功能说明: 初始化MIRACL系统,该函数必须在调用MIRACL库函数之前先执行

函数原型: void bigrand(big w, big x);
功能说明: 使用内置的随机数发生器,产生一个小于w的大数随机数,x<w

函数原型: int egcd(bigx, big y, big z);
功能说明:计算两个大数的最大公约数,z=gcd(x,y)

函数原型: void powmod(big x, big y,big z, big w);
功能说明: 模幂运算,w=xy mod z

函数原型: int mr_compare(big x, big y);
功能说明: 比较两个大数的大小
返回值: x>y时返回+1, x=y时返回0, x<y时返回-1

函数原型: void incr(big x, int n, big z);
功能说明: 将一个大数加上一个整数, z=x+n

函数原型: void decr(big x, int n, big z) ;
功能说明: 将一个大数减去一个整数, z=x-n.

函数原型: void convert(int n, big x);
功能说明: 将一个整数n转换成一个大数x

函数原型: void mirexit();
功能说明: 清除MIRACL系统,释放所有内部变量

程序代码

#include <stdio.h>
#include <math.h>

#include "miracl.h"

int 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值