CodeForces 1459C 数论 GCD

原题链接

题意

  • 首先给出n个数

  • 之后给出m个数,每次问之前的n个数加上当前的这个数之后,总体的gcd是多少,也就是答案需要求出m个总体的gcd

思路

  • 因为n和m都是2e5的范围,所以必须使用接近线性的算法

  • 考虑每次的计算前都是对原数组进行加法运算的改动,所以可以去思考gcd计算中和加减法有关的知识。也就是更相减损术

  • 公式:

\[gcd(a, b, c) = gcd(a, b - a, c - b)
\]

对三个以上的序列也同样成立

  • 所以先将第一列数进行从小到大的排序,然后计算出
\[C = gcd(a_2 - a_1, a_3 - a_2, ···,a_n - a_{n - 1})
\]

之后每次取 \(gcd(C, a_1 + b_j)\)就可以了。注意特判a数组中只有一个的情形。

AC代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; long long gcdd(long long a, long long b)
{
if (!b)
{
return a;
}
else
{
return gcdd(b, a % b);
}
} int n, m;
long long aa[200005];
long long bb[200005]; int main()
{
cin >> n >> m;
long long gd;
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &aa[i]);
}
sort(aa + 1, aa + n + 1);
int co = 0;
bb[0] = 0;
bb[++co] = aa[1];
for (int i = 2; i <= n; ++i)//去重
{
if (aa[i] != aa[i - 1])
{
bb[++co] = aa[i];
}
}
gd = bb[co] - bb[co - 1];
for (int i = co - 1; i >= 2; --i)
{
gd = gcdd(gd, bb[i] - bb[i - 1]);
}
for (int i = 1; i <= m; ++i)
{
long long xx;
scanf("%lld", &xx);
printf("%lld ", co == 1 ? xx + bb[1] : gcdd(gd, bb[1] + xx));
}
return 0;
}

CodeForces 1459C 数论 GCD的更多相关文章

  1. L - Neko does Maths CodeForces - 1152C 数论(gcd)

    题目大意:输入两个数 a,b,输出一个k使得lcm(a+k,b+k)尽可能的小,如果有多个K,输出最小的. 题解: 假设gcd(a+k,b+k)=z; 那么(a+k)%z=(b+k)%z=0. a%z ...

  2. UVA.12716 GCD XOR (暴力枚举 数论GCD)

    UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...

  3. Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))

    传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...

  4. CodeForces 1047C Enlarge GCD(数论)题解

    题意:n个数的gcd是k,要你删掉最少的数使得删完后的数组的gcd > k 思路:先求出k,然后每个数除以k.然后找出出现次数最多的质因数即可. 代码: #include<cmath> ...

  5. 【CodeForces - 1200C】Round Corridor (数论gcd)

    Round Corridor  Descriptions Amugae位于一个非常大的圆形走廊中.走廊由两个区域组成.内部区域等于nñ扇区,外部区域等于m米部门.在相同区域(内部或外部)的每对扇区之间 ...

  6. CodeForces 300C --数论

    A - A Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  7. CodeForces 359D (数论+二分+ST算法)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319 题目大意:给定一个序列,要求确定一个子序列,①使得该子序 ...

  8. codeforces 803C Maximal GCD(GCD数学)

    Maximal GCD 题目链接:http://codeforces.com/contest/803/problem/C 题目大意: 给你n,k(1<=n,k<=1e10). 要你输出k个 ...

  9. Codeforces 803C. Maximal GCD 二分

    C. Maximal GCD time limit per test: 1 second memory limit per test: 256 megabytes input: standard in ...

  10. Codeforces 338 D. GCD Table

    http://codeforces.com/problemset/problem/338/D 题意: 有一张n*m的表格,其中第i行第j列的数为gcd(i,j) 给出k个数 问在这张表格中是否 有某一 ...

随机推荐

  1. 【好玩】如何在github主页放一条贪吃蛇

    前言 缘由 github放小蛇,就问你烧不烧 起因看到大佬github上有一条贪吃蛇扭来扭去,觉得好玩,遂给大家分享一下本狗的玩蛇历程 成果初展 贪吃蛇 访问地址 https://github.com ...

  2. ESP32

    Main menu   Search Create account Log in Personal tools     Apply for a scholarship & submit you ...

  3. IEEE754浮点数与字节数互转工具

    前段时间做的一个小工具,分享一下. 提供浮点数和字节的相互转换. 下载

  4. 使用aop(肉夹馍)为BlazorServer实现统一异常处理

    背景 用户做一个操作往往对应一个方法的执行,而方法内部会调用别的方法,内部可能又会调用别的方法,从而形成一个调用链.我们一般是在最顶层的方法去加try,而不是调用链的每一层都去加try. 在web开发 ...

  5. 关于Windows打印机驱动相关问题-如何利用Java(或其他)调用打印机驱动程序完成原始文件翻译为PCL语言的步骤

    前面这些都是问题描述,问题在偏下面 场景:用户电脑上安装了PCL驱动,可通过驱动完成打印. 需求:现在需要提供一种脱离PC端完成文件上传并打印的功能.让用户使用手机或pc未安装驱动时都能打印文件. 目 ...

  6. 2023 SHCTF-校外赛道 WEB WP

    WEEK1 babyRCE <?php $rce = $_GET['rce']; if (isset($rce)) { if (!preg_match("/cat|more|less| ...

  7. Chromium Canvas工作流

    blink 中实现了2种 canvas,分别是 blink::HTMLCanvasElement 和 blink::OffscreenCanvas ,前者对应 html/dom 中的 canvas,后 ...

  8. VSCode的常用快捷键集合

    1.注释: a) 单行注释:[ctrl+k,ctrl+c] 或 ctrl+/ b) 取消单行注释:[ctrl+k,ctrl+u] (按下ctrl不放,再按k + u) c) 多行注释:[alt+shi ...

  9. mysql 代码适配 postgresql 适配改写,优化案例(行转列 + 标量子查询改写)

    最近在适配个MySQL应用的项目,各种SQL改成PG兼容的语法真的是脑壳痛,今天遇到个有意思的案例. 原 MySQL SQL语句: SELECT DISTINCT l.MALL_NAME '项目', ...

  10. 题解 CF690C1

    题目大意: 给定一张 \(n\) 个点 \(m\) 条边的无向图,判断这是不是一棵树. 题目分析: 两种思路: 思路一: 不需要建图,直接使用并查集判环即可 最后判断一下图联不联通就行,具体方法就是看 ...