题目背景

本题数据已加强,请使用 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优化高精度乘法)相关推荐

  1. python冰雹猜想_洛谷-P5727 【深基5.例3】冰雹猜想

    洛谷-P5727 [深基5.例3]冰雹猜想 给出一个正整数 \(n(n\le 100)\),然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2.经过若干次循环 ...

  2. 洛谷 P1919 【模板】A*B Problem升级版 【快速傅里叶变换 FFT】

    [洛谷 P1919] [模板]A*B Problem升级版 题目大意 给你两个超大整数 a,ba,ba,b,问 a∗ba*ba∗b 其中 a,b≤101000000a,b\leq10^{1000000 ...

  3. python输出一个简单的田字格、用函数简化其代码_Solution Method: 洛谷 P1001 A+B Problem(Python 3 基本输入输出方法及代码简化)...

    本文从 洛谷 P1001 A+B Problem 为例,讲一讲 Python 3 在算法竞赛中的一些基本输入输出方法,以及一些利用 Python 3 特性的代码简化 以下为本文将涉及的内容: inpu ...

  4. 洛谷P1553 数字反转(升级版)

    洛谷P1553 数字反转(升级版) 题目描述 输入格式 输出格式 输入输出样例 说明/提示 个人理解 整数 百分数 分数 小数 AC代码 写在最后 题目描述 给定一个数,请将该数各个位上数字反转得到一 ...

  5. 洛谷——P1001 A+B Problem

    洛谷--P1001 A+B Problem 题目描述 输入两个整数 a, ba,b,输出它们的和(|a|,|b| \le {10}^9∣a∣,∣b∣≤109). 注意 Pascal 使用 intege ...

  6. 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)

    题目链接:P1919 [模板]A*B Problem升级版(FFT快速傅里叶) 题意 给定两个 \(n\) 位 \(10\) 进制整数 \(x\) 和 \(y\),求 \(x*y\). 思路 FFT ...

  7. 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)

    题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...

  8. java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法

    洛谷 P1016 旅行家的预算 Java解法 洛谷 P1016 旅行家的预算 Java解法 package com.two; import java.util.Scanner; public clas ...

  9. 递推+高精度——蜜蜂路线(洛谷 P2437)

    题目选自洛谷P2437 思路和斐波那契一样,不过特判a[0][1]=0a[1[1]=1,a[2][1]=1,之后,a[i][j]=a[i-1][j]+a[i-2][j],这是主要公式,为什么开二维数组 ...

最新文章

  1. 影像组学视频学习笔记(35)-基于2D超声影像的影像组学特征提取、Li‘s have a solution and plan.
  2. 怎么用python画简单的图-Python | 用matplotlib画些简单的图
  3. ZooKeeper官方文档资源
  4. 李宏毅机器学习作业1:预测PM2.5(含训练数据)
  5. 【Elasticsearch】使用真实内存断路器提高节点弹性
  6. Bootstrap 弹出框(Popover)插件
  7. springboot后台怎么获取前端传过来的excel_基于SpringBoot的全自动办公系统源码文档全部免费分享...
  8. 【Hive】多字符分隔
  9. js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
  10. win7无法搜索到网络计算机,笔记本win7系统搜索不到无线网络信号怎么解决
  11. 搭建本地私有pip源
  12. 【一生一芯】Chap.0 IC常用网站论坛门户 如何提出一个技术问题 并尝试解决 | 提问的智慧
  13. le jour, la date et lès saisons
  14. scrapy_AttributeError: 'generator' object has no attribute 'meta'''_'generator' 'dont_filter'
  15. 现在开房都不需要在前台办理入住了?刺激
  16. 03Java常用API-17. 日期格式化类SimpleDateFormat
  17. python工程师必备工具
  18. java.io.IOException: Resetting to invalid mark
  19. 【研究】心脏出血漏洞
  20. oracle视图能否编辑数据,oracle视图的几个重要内容

热门文章

  1. 微信运动服务器忙,微信运动步数每天不足百步,你们宅着忙什么呢?
  2. 支付宝开发问题-“您当前注册的企业账号风险等级过高,根据国家相关法律法则及《支付宝服务协议》规定,我司无法为您提供支付服务”
  3. MySQL报错:Data too long for column
  4. ios直播开发基础,推流协议及流程
  5. mysql汉字按英文字母排序
  6. 程序设计思维与实践 Week14 限时大模拟A - 猫睡觉问题
  7. 概率论-1.4 条件概率(重点:对P(A | B)、P(AB)、P(B)之间关系的理解)
  8. PPT模板 | 湖南农业大学汇报通用PPT模板
  9. 用计算机弹的数字,在计算器上弹两只老虎是用那几个数字
  10. js判断浏览器类型,判断ie内核,webkit