返回首页 返回题库

最大公因数

C++ 中等 GESP五级真题 #数论#最大公因数

题目描述

题面描述

对于两个正整数 ,它们的最大公因数记为 。对于 个正整数 ,它们的最大公因数为:

给定 个正整数 以及 组询问。对于第 ()组询问,请求出 的最大公因数,也即 。

输入格式

第一行,两个正整数 ,分别表示给定正整数的数量,以及询问组数。

第二行, 个正整数 。

输出格式

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

样例1

输入:

5 3
6 9 12 18 30

输出:

1
1
3

样例2

输入:

3 5
31 47 59

输出:

4
1
2
1
4

数据范围

对于 60% 的测试点,保证 ,。

对于所有测试点,保证 ,,。

时间与内存限制

时间限制:1.0 s

内存限制:512.0 MB

💡 查看提示(先自己想一想再看)
核心考察知识点:最大公因数性质、数论推导、数组排序、高效计算。解题思路:利用gcd的性质,gcd(a1+i, a2+i, ..., an+i)等于gcd(a2-a1, a3-a2, ..., an-a(n-1), a1+i),先预处理所有相邻元素差的最大公因数,再对每个询问直接计算gcd(预处理结果, a1+i)即可。注意数据范围较大,需要使用O(n + q)的算法避免超时。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 4 浏览

讨论(0)