FNT的实际编程讨论

yaos 2004-07-15 06:34:58
FNT涉及到几个数据
M,一个大数,
n,2的方幂,变换的长度
a,一个小数,M的类似原根的东西
...全文
422 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaos 2004-07-26
  • 打赏
  • 举报
回复
apfloat是三项式变换

GMP是2^n + 1形式变换
kerbcurb 2004-07-23
  • 打赏
  • 举报
回复
hfloat研究过吗?apfloat下面的两个链接可以找到
yaos 2004-07-22
  • 打赏
  • 举报
回复
只有第二卷有这方面的内容啊
kerbcurb 2004-07-22
  • 打赏
  • 举报
回复
我有第一册的中文版
yaos 2004-07-18
  • 打赏
  • 举报
回复
这次可以了,TAOCP写错了 :)
WinNTL首字母大写 :)

都可以下载了
yaos 2004-07-18
  • 打赏
  • 举报
回复
抱歉,没测试 :)

我看看
shines77 2004-07-17
  • 打赏
  • 举报
回复
Donald e. Knuth - The Art Of Computer Programming Volume2

下不了啊,MIRACL可以

您访问的文件不存在,请查看如下原因:

1、服务器区分大小写,请您检查地址中的大小写;
  (Abc.htm和abc.htm被认为是不同的文件)
2、文件名或文件夹名只能是英文字母或者数字,不能是中文;
3、确认文件的确切路径,是否在该文件夹中。
yaos 2004-07-17
  • 打赏
  • 举报
回复
2我可以解释,1没有发言权

你想问什么?我不太明白

如果问m,n比较小的情况,是用普通乘法做的

比较大的时候,用NTT,分成数组做变换,然后2个数组对应项相乘,乘法如果位数大,再用NTT乘,位数小,用3-Toom算法,再小用karatsuba算法,再小普通乘法
yaos 2004-07-17
  • 打赏
  • 举报
回复
做好了,还有几个好东西,自己看,都更新成为最新的了
yaos 2004-07-17
  • 打赏
  • 举报
回复
高德纳的书上乘法有详细的算法,直到FFT都有

比看apfloat简单啊 :)

我有PDF,给大家传上来吧

http://yaojialin.51.net/download
大部分东西都有
kerbcurb 2004-07-17
  • 打赏
  • 举报
回复
apfloat我在看,内容较多,完全看下来需要一些时间。
yaos 2004-07-17
  • 打赏
  • 举报
回复
程序
a = 1;
for (i = bitLength(n) - 1; i >= 0; i ++)
{
a = sqr(a);
if (bitAt(i))
a = mul(a, m);
}

yaos 2004-07-17
  • 打赏
  • 举报
回复
汗,看错了
:)

乘方通用方法:
m ^ n, n化成二进制,从最高位开始
a = 1

对每个bit循环
1、a = a * a,
2、如果该位是1,再a = a * m

最后输出a,O(n(logn)^2)的复杂度
shines77 2004-07-17
  • 打赏
  • 举报
回复
to kerbcurb():
你可以看看apfloat,乘方其实很简单的,里面有个函数pow,看看就知道了

to all:
apfloat中的FNT里有我在找的FFT中的four step(即six step)步骤,可以对Cache优化,我想之所以叫FNT是因为有FFT的思想在里面,所以才称fast
kerbcurb 2004-07-16
  • 打赏
  • 举报
回复
都是高手,我来学习,请教一问题
我在几位的的帖子中看到以下的计算
1)n!
2)m^n
当n和m达到一定程度,肯定是大数相乘,大数相乘我有自己的代码,但是数度却是慢,没法和几位相比,想问在计算1)和2)时,还没有变成大数的时候,在细节上是如何处理的,GxQcn朋友介绍过一部分内容,yaos和shines以及liangbch(宝宝)三位朋友是如何处理的,能介绍一下吗,谢谢!
yaos 2004-07-16
  • 打赏
  • 举报
回复
似乎说的有点问题,嘿嘿,感觉

这么小的模只能计算8位二进制的数组
yaos 2004-07-16
  • 打赏
  • 举报
回复
参考资料列表

1、高德纳 计算机程序设计艺术 Vol. 2 英文版PDF
2、孙琦 等 快速数论变换 科学版
3、C语言数值算法大全 电子工业版
4、GMP 4.1.2的PDF文档
5、GMP程序注释

讲FFT的书我不知道还能找到不,里边有优化的基4,8等的FFT算法

嘿嘿,差不多全了
yaos 2004-07-16
  • 打赏
  • 举报
回复
流程是把两个乘数分成
两个数组a b
计算a = FNT(a) b = FNT(b)
然后计算 c[i] = a[i] * b[i]
然后计算 c = IFNT(c)
数组c就是a b的卷积,经过简单规约后c变成乘积
yaos 2004-07-16
  • 打赏
  • 举报
回复
一般保证规约前最大的结果不要超过M / 2,就能保证唯一性
gxqcn 2004-07-16
  • 打赏
  • 举报
回复
“每个存储单位(apfloat 每个存储单位范围为0-999999999) 的最大值,必须小于M”

因为要做模运算,如果大于了M,可能造成不同的input,得到相同的output,那就问题大了。
加载更多回复(9)

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧