BZOJ2179: FFT快速傅立叶 & caioj1450:【快速傅里叶变换】大整数乘法
【传送门:BZOJ2179&caioj1450】
简要题意:
给出两个超级大的整数,求出a*b
题解:
Rose_max出的一道FFT例题,卡掉高精度 = =(没想到BZOJ也有)
只要把a和b的每一位当作是多项式的系数,然后做FFT就好了
然后将答案取下来,进行进位的操作,最后输出就好了
参考代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const double PI=acos(-1.0);
struct Complex
{
double r,i;
Complex(){}
Complex(double _r,double _i){r=_r;i=_i;}
friend Complex operator + (const Complex &x,const Complex &y){return Complex(x.r+y.r,x.i+y.i);}
friend Complex operator - (const Complex &x,const Complex &y){return Complex(x.r-y.r,x.i-y.i);}
friend Complex operator * (const Complex &x,const Complex &y){return Complex(x.r*y.r-x.i*y.i,x.i*y.r+x.r*y.i);}
}a[],b[];
int n,m;
int R[];
void fft(Complex *y,int len,int on)
{
for(int i=;i<len;i++) if(i<R[i]) swap(y[i],y[R[i]]);
for(int i=;i<len;i<<=)
{
Complex wn(cos(PI/i),sin(on*PI/i));
for(int j=;j<len;j+=(i<<))
{
Complex w(,);
for(int k=;k<i;k++,w=w*wn)
{
Complex u=y[j+k];
Complex v=w*y[j+k+i];
y[j+k]=u+v;
y[j+k+i]=u-v;
}
}
}
if(on==-) for(int i=;i<len;i++) y[i].r/=len;
}
void calc()
{
m+=n;
int L=;
for(n=;n<=m;n<<=) L++;
for(int i=;i<n;i++) R[i]=(R[i>>]>>)|(i&)<<(L-);
fft(a,n,);
fft(b,n,);
for(int i=;i<=n;i++) a[i]=a[i]*b[i];
fft(a,n,-);
}
char st[];
int d[];
int main()
{
scanf("%s",st+);
n=strlen(st+);n--;
for(int i=;i<=n;i++) a[i].r=double(st[i+]-'');
scanf("%s",st+);
m=strlen(st+);m--;
for(int i=;i<=m;i++) b[i].r=double(st[i+]-'');
calc();
for(int i=;i<=m;i++) d[i]=int(a[m-i].r+0.5);
for(int i=;i<=m;i++)
{
d[i+]+=d[i]/;
d[i]%=;
}
int i=m;
while(d[i+]!=)
{
i++;
d[i+]+=d[i]/;
d[i]%=;
}
m=i;
for(int i=m;i>=;i--) printf("%d",d[i]);
printf("\n");
return ;
}
BZOJ2179: FFT快速傅立叶 & caioj1450:【快速傅里叶变换】大整数乘法的更多相关文章
- poj2389-Bull Math(大整数乘法)
一,题意: 大整数乘法模板题二,思路: 1,模拟乘法(注意"逢十进一") 2,倒序输出(注意首位0不输出) 三,步骤: 如:555 x 35 = 19425 5 5 5 5 5 ...
- POJ 1001 解题报告 高精度大整数乘法模版
题目是POJ1001 Exponentiation 虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...
- OpenJudge 2980 大整数乘法
链接地址:http://bailian.openjudge.cn/practice/2980/ 题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积 ...
- 大整数乘法python3实现
因为python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,可是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...
- 【老鸟学算法】大整数乘法——算法思想及java实现
算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...
- [大整数乘法] java代码实现
上一篇写的“[大整数乘法]分治算法的时间复杂度研究”,这一篇是基于上一篇思想的代码实现,以下是该文章的连接: http://www.cnblogs.com/McQueen1987/p/3348426. ...
- [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换
[原创 转载请注明]瞎写的,如果代码有错,或者各位大佬有什么意见建议,望不吝赐教 更新日志: 对于规模较小的整数乘法使用$$O(n^2)$$方法,提高速度 modify()和operator[]的bu ...
- JS实现大整数乘法(性能优化、正负整数)
本方法的思路为: 一:检查了输入的合法性(非空,无非法字符) 二:检查输入是否可以进行简单计算(一个数为 0,1,+1,-1) 三:去掉输入最前面可能有的正负符号,并判断输出的正负 四:将输入的值分成 ...
- 算法笔记_034:大整数乘法(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import ...
- 大整数乘法(Comba 乘法 (Comba Multiplication)原理)
Comba 乘法以(在密码学方面)不太出名的 Paul G. Comba 得名.上面的笔算乘法,虽然比较简单, 但是有个很大的问题:在 O(n^2) 的复杂度上进行计算和向上传递进位,看看前面的那个竖 ...
随机推荐
- jquery在文本框之后添加红*
var addHtml="<span class='text_red'>*</span>";function req(re){ if(re.parent(& ...
- Python中常见的文件对象内建函数
文件对象内建方法列表 文件对象的方法 操作 file.close() 关闭文件 file.fileno() 返回文件的描写叙述符(file descriptor.FD,整数值) file.flush( ...
- 优化报表系统结构之报表server计算
在报表项目中,经常会碰到数据库压力非常大影响整个系统性能的问题.由以下的传统方案的结构示意图能够看出.所有数据存储和源数据计算都放在数据库完毕.当并发訪问量较大的时候,尽管每一个报表的数据量不大,还是 ...
- [Struts2] No result defined for action ... and result input & Invalid field value for field ...
"No result defined for action ... and result input"错误一般发生在Struts2的拦截器拦截时遇到了问题时.Struts2会将跳转 ...
- xBIM 基础14 使用LINQ实现最佳性能(优化查询)
系列目录 [已更新最新开发文章,点击查看详细] LINQ代表语言集成查询,它是3.5版以来的.NET Framework的一部分.它实现延迟执行,这意味着您可以链接查询语句,并且在您实际迭代结 ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- atom安装插件失败 latex
用atom写latex 链接 http://www.cnblogs.com/schaepher/p/5934184.html 但在gui下安装插件失败 按照以下步骤解决了 安装gitbash cd . ...
- 给DOM操作生成的元素添加事件
问题:通过js给页面添加新元素,并给该元素添加绑定事件,但新添加的元素上却没有绑定任何事件. 常见例子:在处理表格的时候,每行行末有个删除按钮,如下图.点击删除按钮的时候删除这一行. //html部分 ...
- SpringCloud学习笔记(8)----Spring Cloud Netflix之负载均衡-Ribbon的负载均衡的策略
一. 内置 负载均衡策略的介绍的 IRule的实现类 2. 通过代码实现负载均衡 在第六节Riddom的使用的工程中,随机策略配置类 package com.wangx.cloud.springclo ...
- 关于VS2013 Browser Link 新功能
今天小明在编写MVC项目,设计前端项目的时候,突然遇到一个问题,就是无论什么页面,当每次执行调试的时候,页面中都会自动的加上这样一行代码: <!-- Visual Studio Browser ...