链接
题目描述
给出一个长度为n的数组, 要在其中选取一个子序列,使得这个子序列的最大公因数 * 子序列长度最大
思路
设gcd为d,则子序列可以表示为
d x 1 , d x 2 , d x 3... d x k dx1, dx2, dx3... dxk dx1,dx2,dx3...dxk
可知此时的答案为d * k
可知d一定小于等于最小值,所以我们可以直接找最大值输出
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const ll mo = 8681123;
ll ans, n, a[3220005];
int main()
{
scanf("%lld", &n);
for(int i = 1; i <= n; ++i)
scanf("%lld", &a[i]), ans = max(ans, a[i]);
printf("%lld", ans % mo);
return 0;
}