模板 - O(n)预处理,O(1)查询gcd
整理的算法模板合集: ACM模板
基于值域预处理的快速 GCD算法
给定 nnn 个正整数 a1,a2,…,ana_1,a_2,\dots,a_na1,a2,…,an ,再给定 nnn 个正整数b1,b2,…,bnb_1,b_2,\dots,b_nb1,b2,…,bn ,你需要对每对 (i,j)(i,j)(i,j)求出aia_iai 与 bjb_jbj 的最大公因数。
不难发现你的输出应有 n2n^2n2 个正整数。为了减少输出对程序的运行效率的影响,你只需要输出 nn 行,每行一个整数 AiA_iAi 。
其中对于 i∈[1,n]i∈[1,n],Ai=∑j=1nijgcd(ai,bj)Ai\in[1,n]i∈[1,n],A_i=\sum_{j=1}^{n}i^j\gcd(a_i,b_j)Ai∈[1,n]i∈[1,n],Ai=∑j=1nijgcd(ai,bj)A。由于答案可能过大,你只需要输出模 998,244,353998,244,353998,244,353 后的结果即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>using namespace std;
typedef long long ll;const int N = 5000, M = 1000000, T = 1000, Mod = 998244353;int pre[T + 2][T + 2];
int a[N + 2], b[N + 2];
int fac[M + 2][3];
bool isp[M + 2];
int pri[M / 10], tot;
int n;inline int read()
{int re=0,k=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')k=-1;ch=getchar();}while(ch<='9'&&ch>='0'){re=re*10+ch-48;ch=getchar();}return re*k;
}inline void write(int x)
{if(x<10){putchar(x+48);return;}write(x/10),write(x%10);
}void work() {fac[1][0] = fac[1][1] = fac[1][2] = 1;for (int i = 2; i <= M; ++i) {if (!isp[i]) {fac[i][0] = fac[i][1] = 1;fac[i][2] = i;pri[++tot] = i;}for (int j = 1; pri[j] * i <= M; ++j) {int tmp = pri[j] * i;isp[tmp] = true;fac[tmp][0] = fac[i][0] * pri[j];fac[tmp][1] = fac[i][1];fac[tmp][2] = fac[i][2];if (fac[tmp][0] > fac[tmp][1]) {fac[tmp][0] ^= fac[tmp][1] ^= fac[tmp][0] ^= fac[tmp][1];}if (fac[tmp][1] > fac[tmp][2]) {fac[tmp][1] ^= fac[tmp][2] ^= fac[tmp][1] ^= fac[tmp][2];}if (i % pri[j] == 0) {break;}}}for (int i = 0; i <= T; ++i) {pre[0][i] = pre[i][0] = i;}for (int i = 1; i <= T; ++i) {for (int j = 1; j <= i; ++j) {pre[i][j] = pre[j][i] = pre[j][i % j];}}
}int gcd(int a, int b) {int ans = 1;for (int i = 0; i < 3; ++i) {int tmp = (fac[a][i] > T) ?(b % fac[a][i] ?1: fac[a][i]): pre[fac[a][i]][b % fac[a][i]];b /= tmp;ans *= tmp;}return ans;
}int main()
{work();n = read();for (int i = 1; i <= n; ++i)a[i] = read();for (int i = 1; i <= n; ++i)b[i] = read();for (int i = 1; i <= n; ++i) {int ans = 0;for (int j = 1, now = i; j <= n; ++j, now = now * 1ll * i % Mod) {ans = (ans + int(now * 1ll * gcd(a[i], b[j]) % Mod)) % Mod;}write(ans);puts("");}return 0;
}
模板 - O(n)预处理,O(1)查询gcd相关推荐
- 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...
mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...
- 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...
- php pdo 查询语句,PDO:预处理语句(参数化查询)
@(PDO(PHP data object/PHP数据对象))[PDO|预处理语句|参数化查询] The database library called PHP Data Objects or PDO ...
- bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次
bigquery In this post, we're sharing report templates that you can build with SQL queries to Google ...
- php和mysql防伪网站源码,2015年最新php+mysql防伪查询程序源码微信认证查询含7套模板...
系统品牌: 其他系统 开发语言: PHP 其他 数据库: Mysql 其他 前台页面共7套模板,不一一列举图片了,要的自己买回去试试吧! 四大功能特色: 1.防无意多次查询,查询第二次必须刷新页面才能 ...
- NC65 查询模板参照字段启用参照是否包含下级
NC65 查询模板参照字段 勾选参照是否包含下级时,选择完参照字段返回的查询条件,参照字段的值是一个sql语句,无法查询到正确数据 当查询模板字段勾选了是否查询条件时, 通过getQryDLGDele ...
- [HDOJ5869] Different GCD Subarray Query(RMQ,树状数组,离线)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:n个数,q次询问,问区间内gcd不同值的个数. 和dquery那道题一样,也是离线的做法. ...
- php pdo 关闭,php pdo预处理
什么是预处理语句? 可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制. 预处理语句可以带来两大好处: 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次.当 ...
- F - Anti-Rhyme Pairs(rmq算法模板)(后缀数组算法模板)
点击打开链接 题目大意:通常押韵的两个词以相同的字符结尾.我们运用这个特性来规定反押韵的概念.反押韵是一对拥有近似开头的单词.一对单词的反押韵的复杂度被定义为两者都以之开头且最长的字符串S的长度.因此 ...
最新文章
- Lidar激光雷达市场
- 如何创建systemd定时任务
- asp.net中使用窗体身份验证
- 基于MIPS架构的BackTrace实现
- 一个例子理解什么是RPC?
- Android处理崩溃的一些实践
- 万物互联之~RPC专栏
- mega x_[MEGA DEAL] 2020年完整的Java Master Class Bundle(96%)
- 017——数组(十七) asort ksort rsort arsort krsort
- 北大朱占星:顶级会议疯狂投稿下的AI现状 | 专栏
- Spark ML机器学习
- paip.提升用户体验与安全性----cookie盗用检测
- c#实现16进制和字符串之间转换
- Kotlin by lazy解析及在findviewById场景中的使用
- 仿今日头条视频播放JieCaoVideoPlayer
- 制作一个播放器(二)
- 聚焦医疗数字化,华为医疗物联网更懂智慧医疗
- 什么是tv域名?.tv域名不能实名吗?
- ORACLE之热备份
- AndroidStudio配置LitePal时Failed to Resolve