python高精度乘法_洛谷P1919--A*B Problem升级版(NTT优化高精度乘法)
题目背景
本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源。
题目描述
给你两个正整数 a,b,求$ a \times b$.
输入格式
第一行一个正整数,表示 a;
第二行一个正整数,表示 b。
输出格式
输出一行一个整数表示答案。
输入输出样例
输入
114514
1919810
输出
219845122340
说明/提示
【数据范围】
$1\le a,b \le 10^{1000000}$
可能需要一定程度的常数优化。
emmmm,刚开始学FFT/NTT的可能一下子没有反应过来,我们设输入$s$,那么这个数必然能被表示成$s=a_0*10^0+a_1*10^1+a_2*10^2+\cdots $。。。然后就是个愉快的卷积了^_^,只不过要稍微注意一下顺序的问题和边界的处理
以下是AC代码:
/*
实质上就是将一个数变成a_0*10^0+a_1*10+a_2*10^2...然后就可以快乐地卷积了
*/
#include
#include
#include
#include
#include
using namespace std;
#define IOS ios::sync_with_stdio(false);
typedef long long ll;
const int mac=3e6+10;
const int mod=998244353;
ll a[mac],b[mac],rt[5][30];
int r[mac];
string s1,s2;
ll qpow(ll a,ll b)
{
ll ans=1;
a%=mod;
while (b){
if (b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans%mod;
}
void NTT(int len,ll *a,int type)
{
for (int i=0; i
if (i
int nb=1;
for (int mid=1; mid
//ll wn=qpow(G,(mod-1)/(mid<<1));//原根代替单位根
//if (type==-1) wn=qpow(wn,mod-2);//逆变换要乘上逆元
ll wn=rt[type+1][nb++];
for (int j=0; j
ll w=1;
for (int k=0; k
ll x=a[j+k],y=w*a[j+k+mid]%mod;
a[j+k]=(x+y)%mod;
a[j+k+mid]=(x-y+mod)%mod;
}
}
}
}
int main(int argc, char const *argv[])
{
for (int i=0; i<=25; i++){//预处理出每个长度下的逆元
int len=1<
rt[2][i]=qpow(3,(mod-1)/len);//正变换
rt[0][i]=qpow(rt[2][i],mod-2);//逆变换
}
IOS;
cin.tie(0); cout.tie(0);
cin>>s1>>s2;
int len1=s1.length(),len2=s2.length();
for (int i=0; i
a[i]=s1[len1-i-1]-'0';
for (int i=0; i
b[i]=s2[len2-i-1]-'0';
int len=1,l=0;
while (len<=len1+len2) len<<=1,l++;
for (int i=0; i
r[i]=(r[i>>1]>>1)|((i&1)<
NTT(len,a,1); NTT(len,b,1);
for (int i=0; i
a[i]=(a[i]*b[i])%mod;
NTT(len,a,-1);
ll inv=qpow(len,mod-2);
for (int i=0; i<=len1+len2; i++)
a[i]=a[i]*inv%mod;
for (int i=0; i
if (a[i]>=10) {a[i+1]+=a[i]/10; a[i]%=10;}
}
int tail=len1+len2;
while (a[tail]==0 && tail>0) tail--;
while (a[tail]>=10) {a[tail+1]+=a[tail]/10; a[tail++]%=10;}
for (int i=tail; i>=0; i--)
printf("%d",a[i]);
printf("\n");
return 0;
}
标签:P1919,洛谷,10,--,ll,int,tail,include,mod
来源: https://www.cnblogs.com/lonely-wind-/p/13334058.html
python高精度乘法_洛谷P1919--A*B Problem升级版(NTT优化高精度乘法)相关推荐
- python冰雹猜想_洛谷-P5727 【深基5.例3】冰雹猜想
洛谷-P5727 [深基5.例3]冰雹猜想 给出一个正整数 \(n(n\le 100)\),然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2.经过若干次循环 ...
- 洛谷 P1919 【模板】A*B Problem升级版 【快速傅里叶变换 FFT】
[洛谷 P1919] [模板]A*B Problem升级版 题目大意 给你两个超大整数 a,ba,ba,b,问 a∗ba*ba∗b 其中 a,b≤101000000a,b\leq10^{1000000 ...
- python输出一个简单的田字格、用函数简化其代码_Solution Method: 洛谷 P1001 A+B Problem(Python 3 基本输入输出方法及代码简化)...
本文从 洛谷 P1001 A+B Problem 为例,讲一讲 Python 3 在算法竞赛中的一些基本输入输出方法,以及一些利用 Python 3 特性的代码简化 以下为本文将涉及的内容: inpu ...
- 洛谷P1553 数字反转(升级版)
洛谷P1553 数字反转(升级版) 题目描述 输入格式 输出格式 输入输出样例 说明/提示 个人理解 整数 百分数 分数 小数 AC代码 写在最后 题目描述 给定一个数,请将该数各个位上数字反转得到一 ...
- 洛谷——P1001 A+B Problem
洛谷--P1001 A+B Problem 题目描述 输入两个整数 a, ba,b,输出它们的和(|a|,|b| \le {10}^9∣a∣,∣b∣≤109). 注意 Pascal 使用 intege ...
- 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目链接:P1919 [模板]A*B Problem升级版(FFT快速傅里叶) 题意 给定两个 \(n\) 位 \(10\) 进制整数 \(x\) 和 \(y\),求 \(x*y\). 思路 FFT ...
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...
- java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法
洛谷 P1016 旅行家的预算 Java解法 洛谷 P1016 旅行家的预算 Java解法 package com.two; import java.util.Scanner; public clas ...
- 递推+高精度——蜜蜂路线(洛谷 P2437)
题目选自洛谷P2437 思路和斐波那契一样,不过特判a[0][1]=0a[1[1]=1,a[2][1]=1,之后,a[i][j]=a[i-1][j]+a[i-2][j],这是主要公式,为什么开二维数组 ...
最新文章
- 影像组学视频学习笔记(35)-基于2D超声影像的影像组学特征提取、Li‘s have a solution and plan.
- 怎么用python画简单的图-Python | 用matplotlib画些简单的图
- ZooKeeper官方文档资源
- 李宏毅机器学习作业1:预测PM2.5(含训练数据)
- 【Elasticsearch】使用真实内存断路器提高节点弹性
- Bootstrap 弹出框(Popover)插件
- springboot后台怎么获取前端传过来的excel_基于SpringBoot的全自动办公系统源码文档全部免费分享...
- 【Hive】多字符分隔
- js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
- win7无法搜索到网络计算机,笔记本win7系统搜索不到无线网络信号怎么解决
- 搭建本地私有pip源
- 【一生一芯】Chap.0 IC常用网站论坛门户 如何提出一个技术问题 并尝试解决 | 提问的智慧
- le jour, la date et lès saisons
- scrapy_AttributeError: 'generator' object has no attribute 'meta'''_'generator' 'dont_filter'
- 现在开房都不需要在前台办理入住了?刺激
- 03Java常用API-17. 日期格式化类SimpleDateFormat
- python工程师必备工具
- java.io.IOException: Resetting to invalid mark
- 【研究】心脏出血漏洞
- oracle视图能否编辑数据,oracle视图的几个重要内容
热门文章
- 微信运动服务器忙,微信运动步数每天不足百步,你们宅着忙什么呢?
- 支付宝开发问题-“您当前注册的企业账号风险等级过高,根据国家相关法律法则及《支付宝服务协议》规定,我司无法为您提供支付服务”
- MySQL报错:Data too long for column
- ios直播开发基础,推流协议及流程
- mysql汉字按英文字母排序
- 程序设计思维与实践 Week14 限时大模拟A - 猫睡觉问题
- 概率论-1.4 条件概率(重点:对P(A | B)、P(AB)、P(B)之间关系的理解)
- PPT模板 | 湖南农业大学汇报通用PPT模板
- 用计算机弹的数字,在计算器上弹两只老虎是用那几个数字
- js判断浏览器类型,判断ie内核,webkit