原题
解析
这道题我们很容易发现有一个最优的情况, 我们会想办法让数组里的数独立并且尽可能小, 最后发现就是一个0, g, 2g, 3g......的等差数列(g 为最大公因数), 因此分情况讨论即可
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 200010;
int n, k;
int a[N], b[N];
int gcd(int x, int y)
{
return y ? gcd(y, x % y) : x;
}
void solve()
{
cin >> n >> k;
b[0] = 0;
for(int i = 1; i <= n; i ++ )
{
cin >> a[i];
b[i] = 0;
}
int gg = 0;
for(int i = 1; i <= n; i ++ )
{
gg = gcd(gg, a[i]);
}
if(n == 1)
{
if(a[1] < k)
cout << k << '\n';
else
cout << k - 1 << '\n';
}
else if(gg == 1)
{
cout << n + k - 1 << '\n';
}
else if((n - 1) * (gg - 1) <= k - 1)
{
cout << n + k - 1 << '\n';
}
else
{
cout << (k - 1) / (gg - 1) * gg + (k - 1) % (gg - 1) + 1 << '\n';
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T = 1;
cin >> T;
while (T -- )
{
solve();
}
}