使用cuFFT实现大整数乘法

本文介绍了如何利用快速傅里叶变换(FFT)优化大整数乘法,详细阐述了从整数乘法与多项式的关系,到多项式乘法与卷积的联系,再到卷积与FFT的转换。重点讲解了cuFFT库在CUDA环境下的应用,以及如何通过改进避免浮点运算误差,提供了一个完整的cuFFT实现大整数乘法的代码示例。
摘要由CSDN通过智能技术生成

序言


在某些场合,我们可能需要使用远超内置整型范围的整数进行运算,比如公钥加密等。如果使用最原始的竖式计算,那么时间复杂度是 T(n2) ,其中n是相乘的两个整数的位数。使用Karatsuba算法优化,时间复杂度可以降至 T(nlog23)T(n1.585) 。而如果使用快速傅里叶变换(FFT),则可以优化到 T(nlogn)

原理


整数乘法与多项式

一个整数,我们可以把它表示成一个多项式。比如长度为n的十进制整数 a0a1a2a3...an1 写成多项式:

A(x)=a0xn1+a1xn2+...+an2x+an1

整数2345,写成多项式就是:
A(x)=2x3+3x2+4x+5

这样一来,整数乘法就变成了多项式的乘法。比如2345*123,就变成了:
×+=2x5+2x5+4x4+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值