uva1642

/**********
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值