miracl大数运算库使用手册Word格式.docx

上传人:b****2 文档编号:14529970 上传时间:2022-10-23 格式:DOCX 页数:12 大小:108.78KB
下载 相关 举报
miracl大数运算库使用手册Word格式.docx_第1页
第1页 / 共12页
miracl大数运算库使用手册Word格式.docx_第2页
第2页 / 共12页
miracl大数运算库使用手册Word格式.docx_第3页
第3页 / 共12页
miracl大数运算库使用手册Word格式.docx_第4页
第4页 / 共12页
miracl大数运算库使用手册Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

miracl大数运算库使用手册Word格式.docx

《miracl大数运算库使用手册Word格式.docx》由会员分享,可在线阅读,更多相关《miracl大数运算库使用手册Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

miracl大数运算库使用手册Word格式.docx

Example:

add(x,x,x);

//Thisdoublesthevalueofx.

voidbigbits(intn,bigx);

产生一个n位的大整数,初始化随机种子由irand函数实现

bigbits(100,x);

//Thisgeneratesa100bitrandomnumber

intcinstr(bigx,char*s);

将大数字符串转换成大数

返回值:

输入字符数的个数

mip->

IOBASE=16;

//inputlargehexnumberintobigx

cinstr(x,”AF12398065BFE4C96DB723A”);

intcompare(bigx,bigy);

比较两个大数的大小

x>

y时返回+1,x=y时返回0,x<

y时返回-1

voidconvert(intn,bigx);

将一个整数n转换成一个大数x

voidcopy(bigx,bigy);

将一个大数赋值给另一个大数,y=x

intcotstr(bigx,char*s);

将一个大数根据其进制转换成一个字符串

字符串长度

voiddecr(bigx,intn,bigz);

将一个大数减去一个整数,z=x-n.

voiddivide(bigx,bigy,bigz);

两个大数相除,z=x/y;

x=xmody,当变量y和z相同时,x为余数,商不返回(即y的值不变);

当x和z相同时,x为商,余数不返回。

divide(x,y,y);

//x为余数,y值不变

BOOLdivisible(bigx,bigy)

测试x能否整除y

y除x余数为0,返回TRUE,否则返回FALSE

intigcd(intx,inty) 

;

返回两个整数的最大公约数

voidincr(bigx,intn,bigz);

将一个大数加上一个整数,z=x+n

incr(x,2,x);

/*Thisincrementsxby2.*/

voidmirkill(bigx);

释放存大数所占的存

miracl*mirsys(intnd,intnb);

初始化MIRACL系统,该函数必须在调用MIRACL库函数之前先执行

miracl*mip=mirsys(500,10);

//初始化500位的10进行制数

voidmirexit();

清除MIRACL系统,释放所有部变量

voidmultiply(bigx,bigy,bigz);

两个大数相乘,z=x.y

voidnegify(bigx,bigy);

大数取负号,y=-x.

intnumdig(bigx);

返回大数x中数字的个数

voidpremult(bigx,intn,bigz);

一个大数乘以一个整数,z=n.x

intsubdiv(bigx,intn,bigz);

一个大数除以一个整数,z=x/n.

余数

BOOLsubdivisible(bigx,intn)

测试n能否整除x

x除以n余数为0,返回TRUE,否则返回FALSE

voidbigdig(intn,intb,bigx);

产生一个指定长度的进制的随机数,该函数使用置的随机数发生器,初始化种子调用irand函数

bigdig(100,10,x);

//产生一个100位的10进制随机数

voidbigrand(bigw,bigx);

使用置的随机数发生器,产生一个小于w的大数随机数,x<

w

integcd(bigx,bigy,bigz);

计算两个大数的最大公约数,z=gcd(x,y)

voidexpb2(intn,bigx)

计算2的n次方的大数

expb2(1398269,x);

//2^1398269

decr(x,1,x);

//x=x-1

mip->

IOBASE=10;

//使用10进制

cotnum(x,stdout);

//输出到屏幕

Thiscalculatesandprintsoutthelargestknownprimenumber(onatrue32-bitcomputerwithlotsofmemory!

voidexpint(intb,intn,bigx);

计算b的n次方的大数

voidfft_mult(bigx,bigy,bigz);

使用FastFourier算法计算两个大数乘积,z=x.y

unsignedintinvers(unsignedintx,unsignedinty);

计算两个无符号整数(要求互素)的模逆,返回x-1mody

BOOLisprime(bigx);

判断一个大数是否为素数,使用概率测试算法

x为素数返回TRUE,否则返回FALSE

voidpowmod(bigx,bigy,bigz,bigw);

模幂运算,w=xymodz

voidsftbit(bigx,intn,bigz);

将一个大数左移或右移n位,n为正数时左移,负数时右移

intxgcd(bigx,bigy,bigxd,bigyd,bigz);

计算两个大数的扩展最大公约数,也可以用来计算模逆,这个函数比mad函数运算速度稍慢。

z=gcd(x,y)=x.xd+y.yd

xgcd(x,p,x,x,x);

//计算x^-1modp

/*x=1/xmodp(pisprime)*/

三.MIRACL函数库调用举例

1.使用微软的VS.NET2003中文版

(1)启动MicrosoftVisualStudio.NET2003,选择“文件”→“新建”→“项目”命令,如图1-1所示;

图1-1新建项目

(2)打开“新建项目”对话框,选择“Win32控制台项目”模板,在“名称”文本框中输入“TestMircal”,如图1-2所示,单击“确定”按钮;

图1-2选择模板

(3)单击“完成”按钮,完成新建项目;

(4)将大数运算静态库文件ms32.lib和头部文件miracl.h和mirdef.h拷贝到项目所在文件夹,本例中为“C:

\Temp\TestMiracl”,如图1-3所示;

图1-3拷贝大数运算库所需文件

(5)将大数运算静态库文件ms32.lib文件添加到项目中,操作方法是:

右击“TestMircal”,选择快捷菜单中的“添加”→“添加现有项”命令,如图1-4所示;

图1-4打开添加现有项对话框

(6)打开“添加现有项-TestMircal”对话框,选择文件类型为“所有文件(*.*)”,双击“ms32.lib”文件,将其添加到项目中,如图1-5所示;

图1-5添加ms32.lib库文件

(7)右击“TestMircal”,选择快捷菜单中的“添加”命令,打开“属性页”对话框,单击“C/C++”配置属性,选择“预编译头”选项,设置为“不使用编译头”,如图1-6所示,单击“确定”按钮;

图1-6不使用预编译头

(7)为项目添加如下头文件的包含,此处使用extern"

C"

是表示用C的方式编译,因为ms32.lib是C的库,不是C++的库,如图1-7所示;

extern"

{

#include"

miracl.h"

mirdef.h"

}

(8)在_tmain函数中插入如下代码,以测试大数运算情况;

miracl*mip=mirsys(400,10);

//初始化一个400位10进制的大数系统

bigx,y,z;

x=mirvar(177);

y=mirvar(79);

z=mirvar(0);

divide(x,y,z);

//x=xmody,z=x/y

cotnum(x,stdout);

//x=19

cotnum(y,stdout);

//y=79

cotnum(z,stdout);

//z=2

multiply(x,y,z);

//z=x*y

//将原来的10进制改为16进制模式

cotnum(z,stdout);

//5DD

/*测试13^-1mod2436=937

x=mirvar(13);

y=mirvar(2436);

xgcd(x,y,z,z,z);

std:

:

cout<

<

"

z="

*/

mirkill(x);

//释放大数变量

mirkill(y);

mirkill(z);

//===================

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1