D. Coprime
time limit per test
3 seconds
memory limit per test
256 megabytes
Given an array of n positive integers a1,a2,…,an (1≤ai≤1000). Find the maximum value of i+j such that ai and aj are coprime,† or −1 if no such i, j exist.
For example consider the array [1,3,5,2,4,7,7]. The maximum value of i+j that can be obtained is 5+7, since a5=4 and a7=7 are coprime.
† Two integers p and q are coprime if the only positive integer that is a divisor of both of them is 1 (that is, their greatest common divisor is 1).
Input
The input consists of multiple test cases. The first line contains an integer t (1≤t≤10) — the number of test cases. The description of the test cases follows.
The first line of each test case contains an integer n (2≤n≤2⋅105) — the length of the array.
The following line contains n space-separated positive integers a1, a2,..., an (1≤ai≤1000) — the elements of the array.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.
Output
For each test case, output a single integer — the maximum value of i+j such that i and j satisfy the condition that ai and aj are coprime, or output −1 in case no i, j satisfy the condition.
Example
Input
Copy
6
3
3 2 1
7
1 3 5 2 4 7 7
5
1 2 3 4 5
3
2 2 4
6
5 4 3 15 12 16
5
1 2 2 3 6
Output
Copy
6 12 9 -1 10 7
Note
For the first test case, we can choose i=j=3, with sum of indices equal to 6, since 1 and 1 are coprime.
For the second test case, we can choose i=7 and j=5, with sum of indices equal to 7+5=12, since 7 and 4 are coprime.
解题说明:此题可以采用穷举算法,两层循环遍历,在最大公约数为1的情况下找出数字之和最大的情况。
#include<stdio.h>
#include<string.h>
int gcd(int a, int b)
{int r;while (b > 0){r = a % b;a = b;b = r;}return a;
}int main()
{int t, a[1010];scanf("%d", &t);while (t--){memset(a, -1, sizeof(a));int n, maxn = -1;scanf("%d", &n);for (int i = 1; i <= n; i++){int x;scanf("%d", &x);a[x] = i;}for (int i = 1; i <= 1000; i++){if (a[i] == -1){continue;}for (int j = 1; j <= 1000; j++){if (a[j] == -1){continue;}if (gcd(i, j) == 1){if (maxn < a[i] + a[j]){maxn = a[i] + a[j];}}}}if (maxn == -1){printf("-1\n");}else{printf("%d\n", maxn);}}return 0;
}