找回密码
 欢迎注册
查看: 13574|回复: 7

[原创] FFT与离散卷积与大数乘法

[复制链接]
发表于 2010-10-4 09:40:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
最近由于专业的原因,不得不需要计算离散卷积,居然发现使用快速傅里叶变换FFT, 可以很快地加速卷积的运算,同时我又想到计算大数的乘法,其实也就是卷积呀, 真没想到FFT还能在整数的乘法和离散卷积上有用武之地! 如果不使用FFT的话,计算卷积将是很慢的事情,但是使用了FFT后,发现计算结果块了 很多,真的是有所感叹
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-5 07:42:24 | 显示全部楼层
虽然我不知道怎么计算FFT,但早已知道大数的乘法是采用FFT或FNT的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-5 16:45:29 | 显示全部楼层
现在FFT乘法基本流程还是和浮点FFT一样的 所以要求模是$2^n -+ 1$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-10-9 14:04:30 | 显示全部楼层
还以为是详细分析和推导
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-12-10 12:03:46 | 显示全部楼层
一直被考试困扰......烦 。 前些日子借了有关这方面的书,还没看完,等忙完了再继续,又回到了数学分析的年代,呵呵... 《快速傅里叶变换及其c程序》中国科学版 《Fourier 分析》清华版 ------------------------------------------------ 记得某开源计算pi时构建大数乘用了FFT,日本的吧,(gmp就不提了)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-12-10 16:09:29 | 显示全部楼层
我在2006年学习过FFT,并写了几个FFT程序,详见 征集FFT算法的代码和算法 其后在csdn下载中心给出了所有的7种FFT算法的源代码和测试代码,可从 7种FFT代码和测试程序 CSDN 下载频道 下载
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-2-18 13:13:05 | 显示全部楼层
当然不是说用了FFT,大数乘法就快了,要依赖于具体平台且要达到一定的数值规模 //============================= //大数乘法C=A*B FFT卷积 //C=A*B (N=16) A=0 0 0 0 0 0 0 0 0 0 1 1 3 2 1 2 (mod 10) B=0 0 0 0 0 0 0 0 0 0 3 1 1 3 1 2 (mod 10) C=0 0 0 0 0 3 4 11 13 12 21 14 13 11 4 4 (mod 10) C为A,B的卷积 =0 0 0 0 0 3 5 2 4 4 2 5 4 1 4 4 //=>修改基100如下(N=8): //============================= A=0 0 0 0 0 11 32 12 (mod 100) B=0 0 0 0 0 31 13 12 (mod 100) C=0 0 0 341 1135 920 540 144 (mod 100) =0 0 3 52 44 25 41 44 //=>修改基1000如下(N=4): //============================= A=0 0 113 212 (mod 1000) B=0 0 311 312 (mod 1000) C=0 35143 101188 66144 (mod 1000) =35 244 254 144 //=>修改基10000如下(N=4): //============================= A=0 0 11 3212 (mod 10000) B=0 0 31 1312 (mod 10000) C=0 341 114004 4214144 (mod 10000) =0 352 4425 4144 =============================== =============================== //A=0 0 0 0 3 2 1 2 //B=0 0 0 0 1 3 1 2 //C=0 3 11 10 13 11 4 4 (mod 10) //C=0 4 2 1 4 1 4 4 // ============================= //A=0 0 0 0 3 2 1 2 //B=0 0 0 0 0 3 1 2 //C=0 0 9 9 11 11 4 4 (mod 10) //C=0 1 0 0 2 1 4 4 // ============================ //A=0 0 0 0 3 2 1 2 //B=0 0 0 1 1 3 1 2 //C=3 5 12 12 13 11 4 4 (mod 10) //C=3 6 3 3 4 1 4 4 //============================= //C=A*B //A=0 0 1 1 3 2 1 2 (mod 10) //B=0 0 3 1 1 3 1 2 (mod 10) //出错
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-2-18 13:24:25 | 显示全部楼层
上面最后一个举例“出错”的原因估计是:结果有11位,而你用的FFT长度不足。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 00:19 , Processed in 0.026947 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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