hrefspace

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

小数字的快速幂优化算法

[复制链接]

275

主题

454

帖子

1014

积分

大司空

Rank: 5Rank: 5

积分
1014
发表于 2023-11-2 10:47:27 | 显示全部楼层 |阅读模式
对于小于16的正整数n,大数p>2^64,大数m>2^64
如何更快速的计算
$n^p % m$
有没有办法得到比传统快速幂算法更好的结果
回复

使用道具 举报

0

主题

189

帖子

163

积分

关内侯

Rank: 2

积分
163
发表于 2023-11-2 10:47:48 | 显示全部楼层
穷举检索?
回复

使用道具 举报

0

主题

181

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-11-2 10:48:36 | 显示全部楼层
目前最好的工作大约在prime95里面
prime95的最好成绩是,给出了一个证明n^p%m=c的证据,通过证据可以快速进行验证
所以,目前来说没有
回复

使用道具 举报

0

主题

179

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2023-11-2 10:49:00 | 显示全部楼层
目前想到的优化是
1、x = n; while (x < m) x *= n;  n1 = x%m; 让底数变成大数
2、x = n; while (x < m) x *= x;  n1 = x%m; 同样,但是快速平方,相对更少计算
回复

使用道具 举报

0

主题

206

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-11-2 10:49:12 | 显示全部楼层
请问百分号是什么意思?
回复

使用道具 举报

1

主题

186

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2023-11-2 10:49:32 | 显示全部楼层
一般的快速模幂算法, 也适用于楼主的底数为小数字情形; 反之不然.
所以, 底数变大数, 是一种信息损失, 只会更慢.

因为乘法取模中, 若乘数有小整数, 积可能更大概率不大于模, 可不用修正;
底数变大, 指数变小, 但后者的bit数减少有限, 并不划算.
回复

使用道具 举报

0

主题

194

帖子

171

积分

关内侯

Rank: 2

积分
171
发表于 2023-11-2 10:50:27 | 显示全部楼层
确实,p次快速幂常规乘法次数是p的二进制长度和二进制表示中1的个数的和
换成大数后,p减少后,二进制长度和二进制表示中1的个数的和并没有少多少
加上附加运算,可能不划算了

所以,这个方法不通了

为啥想做这个,是因为最近万年不更新的GMP更新了6.3.0
其中一个改进就是
New special code for base = 2 in mpz_powm reduces the average time for the functions that test primality.
所以我才考虑这个问题
回复

使用道具 举报

0

主题

168

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2023-11-2 10:51:14 | 显示全部楼层
base=2, 乘法可优化成移位, 可能仅仅是这个缘故吧.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 09:01 , Processed in 0.068518 second(s), 21 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

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