FFT用于高效大数乘法(当模板用)
转载来源:https://blog.csdn.net/zj_whu/article/details/72954766
#include <cstdio>
#include <cmath>
#include <complex>
#include <cstring>
using namespace std;
const double PI(acos(-1.0));
typedef complex<double> C;
const int N = (1 << 20);
int ans[N];
C a[N], b[N];
char s[N], t[N];
void bit_reverse_swap(C* a, int n) {
for (int i = 1, j = n >> 1, k; i < n - 1; ++i) {
if (i < j) swap(a[i], a[j]);
// tricky
for (k = n >> 1; j >= k; j -= k, k >>= 1) // inspect the highest "1"
;
j += k;
}
}
void FFT(C* a, int n, int t) {
bit_reverse_swap(a, n);
for (int i = 2; i <= n; i <<= 1) {
C wi(cos(2.0 * t * PI / i), sin(2.0 * t * PI / i));
for (int j = 0; j < n; j += i) {
C w(1);
for (int k = j, h = i >> 1; k < j + h; ++k) {
C t = w * a[k + h], u = a[k];
a[k] = u + t;
a[k + h] = u - t;
w *= wi;
}
}
}
if (t == -1) {
for (int i = 0; i < n; ++i) {
a[i] /= n;
}
}
}
int trans(int x) {
return 1 << int(ceil(log(x) / log(2) - 1e-9)); // math.h/log() 以e为底
}
int main() {
// freopen("test0.in","r",stdin);
// freopen("test0b.out","w",stdout);
int n, m, l;
for (; ~scanf("%s%s", s, t);) {
n = strlen(s);
m = strlen(t);
l = trans(n + m - 1); // n次*m次不超过n+m-1次
for (int i = 0; i < n; ++i) a[i] = C(s[n - 1 - i] - '0');
for (int i = n; i < l; ++i) a[i] = C(0);
for (int i = 0; i < m; ++i) b[i] = C(t[m - 1 - i] - '0');
for (int i = m; i < l; ++i) b[i] = C(0);
FFT(a, l, 1); //把A和B换成点值表达
FFT(b, l, 1);
for (int i = 0; i < l; ++i) //点值做乘法
a[i] *= b[i];
FFT(a, l, -1); //逆DFT
for (int i = 0; i < l; ++i) ans[i] = (int)(a[i].real() + 0.5);
ans[l] = 0; // error-prone :'l' -> '1'
for (int i = 0; i < l; ++i) {
ans[i + 1] += ans[i] / 10;
ans[i] %= 10;
}
int p = l;
for (; p && !ans[p]; --p)
;
for (; ~p; putchar(ans[p--] + '0'))
;
puts("");
}
return 0;
}
FFT用于高效大数乘法(当模板用)的更多相关文章
- 51nod 1027大数乘法
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
- [hdu1402]大数乘法(FFT模板)
题意:大数乘法 思路:FFT模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...
- ACM学习历程—51NOD1028 大数乘法V2(FFT)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 题目大意就是求两个大数的乘法. 但是用普通的大数乘法,这 ...
- 1028 大数乘法 V2(FFT or py)
1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B ...
- Java 大数、高精度模板
介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...
- FFT教你做乘法(FFT傅里叶变换)
题目来源:https://biancheng.love/contest/41/problem/C/index FFT教你做乘法 题目描述 给定两个8进制正整数A和B(A和B均小于10000位),请利用 ...
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- hdu_1042(模拟大数乘法)
计算n! #include<cstring> #include<cstdio> using namespace std; ]; int main() { int n; whil ...
- hdu1313 Round and Round We Go (大数乘法)
Problem Description A cyclic number is an integer n digits in length which, when multiplied by any i ...
随机推荐
- PTA(Basic Level)1021.个位数统计
给定一个 k 位整数 \(N=d_{k−1}10^{k−1}+⋯+d_110^1+d_0 (0≤d_i≤9, i=0,⋯,k−1, d_{k−1}>0)\),请编写程序统计每种不同的个位数字出现 ...
- Python使用pycharm导入pymysql
file->setting->project->project interperter,双击右侧出现的pip,弹出安装包,搜索pymysql->选择第一个->Instal ...
- CF450A 【Jzzhu and Children】
普通的模拟题这题用一个队列容器来模拟队列元素是pair类型的,first用来存每个小朋友想要的糖数,second用来存小朋友的序号,然后开始模拟,模拟出口是当队列迟到等于1时就输出当前队列里小朋友的序 ...
- P1004方格取数
这是提高组得一道动态规划题,也是学习y氏思考法的第一道题. 题意为给定一个矩阵,里面存有一些数,你从左上角开始走到右下角,另一个人从右下角开始走到左上角,使得两个人取数之和最大,当然一个数只可以取走一 ...
- 使用.NET Core创建Windows服务(一) - 使用官方推荐方式
原文:使用.NET Core创建Windows服务(一) - 使用官方推荐方式 原文:Creating Windows Services In .NET Core – Part 1 – The &qu ...
- python之time
1. 获取当前时间戳 # -*- coding: UTF- -*- import time print(time.time()) # 输出:1540693297.94459 2. 将时间戳格式化为本地 ...
- python--命令(各个模块的安装)
python命令行 退出python命令行:exit() 安装pymysql pip install pymysql 安装request pip install requests 1.安装django ...
- Django框架——基础之模板系统(template文件夹)
---恢复内容开始--- 1. 常用语法 需要记住两组特殊符号:{{ }} 和 {% %}. 在运用到变量的时候使用{{ }},如果是跟逻辑相关的话就使用{% %}. 在Django模板(t ...
- upupw : Apache Php5.5 的使用
1. 官网下载 1. 官网下载 apache php5.5点击下载 但是 现在有时候打不开,所以提供以下方法 2. 百度云网盘下载 https://pan.baidu.com/s/1eQ2k1Su ...
- Spark报错java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
Spark 读取 JSON 文件时运行报错 java.io.IOException: Could not locate executable null\bin\winutils.exe in the ...