Worker HDU - 6576
多个数求解GCD与LCM
循环求解,最后的就是结果。
AC代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline ll LCM(ll a, ll b) {
return (a * b) / __gcd(a, b);
}
int main() {
int n;
ll m;
while (cin >> n >> m) {
vector<ll> a(n);
cin >> a[0];
ll gcd = a[0], lcm = a[0];
for (int i = 1; i < n; i++) cin >> a[i], gcd = __gcd(gcd, a[i]);
for (int i = 1; i < n; i++) lcm = LCM(lcm, a[i]);
ll sum = 0;
for (int i = 0; i < n; i++) sum += (a[i] = lcm / a[i]);
if (sum != 0 && m % sum == 0) {
cout << "Yes\n";
ll tmp = m / sum;
for (int i = 0; i < n; i++) {
cout << tmp * a[i];
cout << (i == n - 1 ? '\n' : ' ');
}
} else cout << "No\n";
}
return 0;
}