hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 1127|回复: 9

大数运算需要解决的问题

[复制链接]

585

主题

769

帖子

2007

积分

大司空

Rank: 5Rank: 5

积分
2007
发表于 2024-2-3 08:29:06 | 显示全部楼层 |阅读模式
转载此文仅作参考,并不表示追风同意该文全部观点

http://blog.icxo.com/read.jsp?aid=32454&uid=9169

本文适合那些正在或者将要进行大数运算的读者,对于其他读者,意义不大,大可就此打住。

       如果你想要编程序自己实现一套大数运算,通过本文你将了解这一过程中你都需要做些什么;如果你正在使用某一第三方提供的大数运算,也可以通过本文更深入的了解其体系结构。

     这里的大数,指的是超过计算机CPU寄存器表达的数,即超过计算机字长的数。大数运算主要指的是对大数进行数论运算,如加、减、乘、除。出于效率原因,一般的大数运算主要指对无符号类型的数进行数论计算。

     为使用计算机解决大数运算,需要巧妙的做一些安排,以使得运算过程中效率最优、表达简单、转换便捷。下面逐条介绍大数运算需要解决的问题。

一.大数表达


    >大数在计算机中的表示,包括存储方式和存储顺序。
              A :{ 0,1,2...};


二.大数基本运算


     >大数加法。
             w = u + v;
     >大数增量。
             w = u + 1;        
     >大数减法。
             w = u - v;
     >大数减量。
             w = u - 1;        
     >大数乘法。
             w = u * v;
     >大数乘方(含平方)。
             w = u * u ... * u;        
     >大数除法。
             q = u / v;
     >带余大数除法。
             q = u / v ... r;

三.模算术


     >大数模计算。
             r = u mod m;
     >大数模加法。
             r = (u + v) mod m;
     >大数模减法。
             r = (u - v) mod m;
     >大数模乘计算。
             r = (u * v) mod m;
     >大数模乘方。
             r = (u * u * ... * u) mod m;
     >大数模逆。
             r = (u ^ -1) mod m;

四.位运算


     >大数位置0,1。
             w = setbit(u,pos,(0,1));
     >大数位测试。
             bool = testbit(u,pos,(0,1));
     >大数位与。
             w = u and v;
     >大数位或。
             w = u or v;
     >大数位异或。
             w = u xor v;
     >大数左位移。
             w = shl(u,n);
     >大数右位移。
             w = shr(u,n);


五.数论运算


     >大数完全平方检验。
              bool = issql(u);
     >大数开方。
             w = u root v;
     >大数最大公约数。
             w = gcd(u,v);
     >大数最小公倍数。
             w = lcm(u,v);
     >大数素性检验。
              bool = isprime(u);
     >大数素数产生。
              u,v < prime();

六.伪随机数


     >大数随机数初始化。
              initrand(seed);
     >大数随机数产生。
              u = rand(seed);


七.比较


     >大数比较。
             bool = compare(u,v);
     >大数是否是0。
             bool = IsZero(u);


八.赋值


     >大数赋值。
             w = u;
     >大数补码运算。
             w = neg(u);


九.IO


     >大数转换ASCII码。
             w = itoa(u,base);
     >ASCII码转换大数。
             u = atoi(w,base);
     >大数打印。
             print(u);
     >大数输入。
             u = scanf();

十.大数应用

    >大数RSA算法。
             w = rsa(u,v,m);
回复

使用道具 举报

0

主题

212

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-3 08:29:54 | 显示全部楼层
 以前曾看过该文。该文主要是讨论接口的,对算法没有深入,因此也就没再关注它。
回复

使用道具 举报

0

主题

192

帖子

159

积分

关内侯

Rank: 2

积分
159
发表于 2024-2-3 08:30:14 | 显示全部楼层
文章在哪
回复

使用道具 举报

0

主题

195

帖子

166

积分

关内侯

Rank: 2

积分
166
发表于 2024-2-3 08:31:08 | 显示全部楼层
无心人已经转载了,内容差不多了
回复

使用道具 举报

0

主题

182

帖子

76

积分

关内侯

Rank: 2

积分
76
发表于 2024-2-3 08:31:33 | 显示全部楼层
大数运算中不应强求非要实现“RSA算法”的应用。
如果提供的算法函数模块够丰富,要实现某一具体加解密算法是很简单的。
回复

使用道具 举报

0

主题

153

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-3 08:32:32 | 显示全部楼层
因为RSA是个经典的应用实例,弄个例子也不错
回复

使用道具 举报

0

主题

180

帖子

37

积分

新手上路

Rank: 1

积分
37
发表于 2024-2-3 08:32:49 | 显示全部楼层
可惜只是罗列了问题,
却没有给出每个问题的具体实现
回复

使用道具 举报

0

主题

184

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-2-3 08:33:23 | 显示全部楼层
关于如何写一个大数库,有很多开源的思想和代码,我比较欣赏的是Tom St Denis(及其团队)弄的个
数据加密的开源站,为了支撑这个Crypt项目,又扩展了对大数库的开发,我仔细的看过其代码和算法思想,并且在学习的过程中一个一个的敲了下来,感受很深。对大数库的编写有了一个详细的了解和全局的把握。
值得注意的是Tom St Denis写了一本关于这个库的书:《BigNum Math: Implementing Cryptographic Multiple Precision Arithmetic 》我看的是中文版,《BigNum Math:加密多精度算法的理论与实现》当你看完此书,一个大数库就实现了。像RSA公钥算法并不属于大数库的范畴,但大数库中的基本的数论算法是RSA必要的组成部分。

其开源站为:http://libtom.org/ 对于开源加免费,Tom St Denis的回答,我表示感触很深。
他说:“我有这个能力,并且我愿意”。

写的很好,好东西要分享,呵呵....Good Luck!!
回复

使用道具 举报

0

主题

192

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2024-2-3 08:34:16 | 显示全部楼层
Mark, 有时间好好读一下
回复

使用道具 举报

948

主题

1162

帖子

3655

积分

超级版主

Rank: 8Rank: 8

积分
3655

论坛头条论坛元老谋士数据帝优秀版主超级版主见习版主论坛版主

发表于 2024-2-3 08:35:16 | 显示全部楼层
我上个月在学校图书馆就看到了这本书,那本书选择了libtom作为教学,而没有选择GMP,说是因为libtom的代码是平台无关的,而GMP的代码有太多的平台相关的if控制语句。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-22 05:17 , Processed in 0.074473 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表