/**********
author:chanjun2016
email:15755396353@163.com
***********/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
#define INF = 0x3f3f3f3f
const int maxn = 1e5;
long long f[maxn + 10];
map<long long,long long> Hash;
long long gcd(long long a,long long b){
if (!b){
return a;
}
return gcd(b,a % b);
}
int main(){
int T;
scanf("%d",&T);
while (T--){
int n;
scanf("%d",&n);
for (int i = 1; i <= n; ++i){
scanf("%lld",&f[i]);
}
Hash.clear();
Hash[f[1]] = 1;
long long ans = f[1];
for (int i = 2; i <= n; ++i){
for (map<long long,long long>::iterator j = Hash.begin(); j != Hash.end();){
long long k = gcd(j->first,f[i]);
if (k < j->first){
if (Hash.count(k) == 0){
Hash[k] = j->second;
}
j = Hash.erase(j);
}else{
++j;
}
}
if (Hash.count(f[i]) == 0) {
Hash[f[i]] = i;
}
for (map<long long,long long>::iterator j = Hash.begin(); j != Hash.end(); ++j){
//printf("%lld %lld\n", j->first,j->second);
ans = max(ans,j->first * (i - j->second + 1));
}
//printf("%lld\n", ans);
}
printf("%lld\n", ans);
}
return 0;
}
uva1642
最新推荐文章于 2020-07-30 09:54:55 发布