HDU6025 Coprime Sequence (思路题)
2017-07-12 17:52
274 查看
Coprime Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 785 Accepted Submission(s): 411
[align=left]Problem Description[/align]
Do you know what is called ``Coprime Sequence''? That is a sequence consists of
n
positive integers, and the GCD (Greatest Common Divisor) of them is equal to 1.
``Coprime Sequence'' is easy to find because of its restriction. But we can try to maximize the GCD of these integers by removing exactly one integer. Now given a sequence, please maximize the GCD of its elements.
[align=left]Input[/align]
The first line of the input contains an integer
T(1≤T≤10),
denoting the number of test cases.
In each test case, there is an integer n(3≤n≤100000)
in the first line, denoting the number of integers in the sequence.
Then the following line consists of n
integers a1,a2,...,an(1≤ai≤109),
denoting the elements in the sequence.
[align=left]Output[/align]
For each test case, print a single line containing a single integer, denoting the maximum GCD.
[align=left]Sample Input[/align]
3
3
1 1 1
5
2 2 2 3 2
4
1 2 4 8
[align=left]Sample Output[/align]
1
2
2
[align=left]Source[/align]
2017中国大学生程序设计竞赛 - 女生专场
[align=left]Recommend[/align]
jiangzijing2015 | We have carefully selected several similar problems for you: 6032 6031 6030 6029 6028
题意
n个数,最大公约数为一,求去掉一个数,求出最大公约数
思路
从左往右,找出前几个数的最大公约数 gleft[i]
从右往左,找出后几个数的最大公约数 gright[i]
遍历,去掉第i个数时,这最大公约数为gleft[i-1]+grigh[i+1]
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<math.h> const int maxn=100010; using namespace std; int g[maxn]; int gleft[maxn]; int gright[maxn]; int _gcd(int a,int b) { return a==0?b:_gcd(b%a,a); } int main() { int t,n,maxnn; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&g[i]); if(i==1) gleft[i]=g[i]; else gleft[i]=_gcd(gleft[i-1],g[i]); } for(int i=n;i>0;i--) { if(i==n) gright[i]=g[i]; else gright[i]=_gcd(gright[i+1],g[i]); } maxnn=0; for(int i=1;i<=n;i++) { if(i==1) maxnn=max(maxnn, gright[2]); else if(i==n) maxnn=max(maxnn,gleft[n-1]); else maxnn=max(maxnn,_gcd(gleft[i-1], gright[i+1])); } printf("%d\n",maxnn); } return 0; }
相关文章推荐
- hdu6025 Coprime Sequence(2017女生赛)
- HDU6025-Coprime Sequence
- HDU6025 Coprime Sequence —— 前缀和 & 后缀和
- HDU6025 Coprime Sequence【前缀GCD+后缀GCD】
- HDU6025 Coprime Sequence【前缀GCD+后缀GCD】
- HDU6025 Coprime Sequence (前缀后缀处理)
- HDU6025 Coprime Sequence
- HDU6025-Coprime Sequence-简单数学
- 2017女生赛 1003 Coprime Sequence【前缀后缀维护】
- HDU 6025 Coprime Sequence
- Coprime Sequence
- hdoj 6025 Coprime Sequence
- hdu 6025 Coprime Sequence (前后缀GCD)
- CSP认证训练题——Coprime Sequence HDU - 6025
- HDU - 6025 Coprime Sequence
- HDU6205 Coprime Sequence
- HDU 6025 Coprime Sequence (前后缀+GCD)
- C - Coprime Sequence
- hdu 6025 Coprime Sequence
- Coprime Sequence(优化)