// Model solution for problem C // Author: Grzegorz Guspiel #include #include #include using namespace std; #define REP(i, n) for (int i = 0; i < int(n); i++) #define FOREACH(i, v) for (__typeof((v).begin()) i = (v).begin(); i != (v).end(); i++) #define SIZE(v) ((int)(v).size()) #define pb push_back #define mp make_pair #define st first #define nd second int stmp; #define scanf stmp=scanf typedef long long LL; typedef pair PLL; LL euclid(LL a, LL b) { while (a) { b %= a; swap(a, b); } return b; } LL t[10000100]; int n; int main() { int z; scanf("%d", &z); while (z--) { scanf("%d", &n); REP (i, n) scanf("%lld", t + i); vector lefts; LL best = 0; REP (i, n) { lefts.pb(mp(0, i)); FOREACH (leftEnd, lefts) { leftEnd->st = euclid(leftEnd->st, t[i]); } sort(lefts.begin(), lefts.end()); vector tmp; REP (j, SIZE(lefts)) { if (!j || lefts[j - 1].st != lefts[j].st) { tmp.pb(lefts[j]); } } swap(tmp, lefts); FOREACH (leftEnd, lefts) { best = max(best, (i - leftEnd->nd + 1) * LL(leftEnd->st)); } } printf("%lld\n", best); } return 0; }