洛谷 P13014:[GESP202506 五级] 最大公因数

【题目来源】
https://www.luogu.com.cn/problem/P13014

【题目描述】
对于两个正整数 ,他们的最大公因数记为 。对于 个正整数 ,他们的最大公因数为:
给定 个正整数 以及 组询问。对于第 组询问,请求出 的最大公因数,也即

【输入格式】
第一行,两个正整数 ,分别表示给定正整数的数量,以及询问组数。
第二行, 个正整数

【输出格式】
输出共 行,第 行包含一个正整数,表示 的最大公因数。

【输入样例】
5 3
6 9 12 18 30

【输出样例】
1
1
3

【说明/提示】
对于 60% 的测试点,保证 1≤n≤10^3,1≤q≤10。
对于所有测试点,保证 1≤n≤10^5,1≤q≤10^5,1≤ai≤1000。

【算法分析】
● "辗转相除法"求最大公约数:https://blog.csdn.net/hnjzsyjyj/article/details/145671149
● 最大公约数性质:


【算法代码】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
int a[maxn];
int n,q,t;

int gcd(int a,int b) {
    if(b==0) return a;
    return gcd(b,a%b);
}

int main() {
    scanf("%d%d",&n,&q);
    for(int i=1; i<=n; i++) {
        scanf("%d",&a[i]);
    }
    sort(a+1,a+n+1);
    for(int i=2; i<=n; i++) {
        t=gcd(t,a[i]-a[i-1]);
    }
    for(int i=1; i<=q; i++) {
        printf("%d\n",gcd(t,a[1]+i));
    }
    return 0;
}

/*
in:
5 3
6 9 12 18 30

out:
1
1
3
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/145671149
https://blog.csdn.net/hnjzsyjyj/article/details/136276606

相关推荐
大桔骑士v6 个月前
【算法学习笔记】34:扩展欧几里得算法
算法·acm·数论·最大公约数·扩展欧几里得算法
xuchaoxin13758 个月前
公约数@公因数@互素@最大公约数@公约数相关性质定理@辗转相除法@欧几里得法
最大公约数
摆烂小白敲代码10 个月前
小小GCD、LCM拿下拿下
c语言·数据结构·c++·算法·最大公约数·gcd·lcm
闻缺陷则喜何志丹1 年前
【最大公约数 排序】2344. 使数组可以被整除的最少删除次数
c++·算法·leetcode·排序·最大公约数·最少·被整除
阿明62 年前
求最大公约数的几种常见的方法 【详解】
c语言·算法·最大公约数