

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Một số chia hết đồng thời cho X, Y, Z tức số đó chia hết cho BCNN(X, Y, Z).
Vậy ta chỉ cần tìm ceil(`10^{N-1}` / BCNN(X, Y, Z)) * BCNN(X, Y, Z) và kiểm tra xem nó có vượt quá N chữ số hay không.
$\\$
Code tham khảo:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll lcm(ll a, ll b) {
return a * b / __gcd(a, b);
}
void solve() {
ll x, y, z, n; cin >> x >> y >> z >> n;
ll bcnn = lcm(x, lcm(y, z));
ll res = (long long)(ceil(pow(10, n-1) / bcnn)) * bcnn;
if (res < pow((unsigned long long)10, n)) cout << res;
else cout << -1;
cout << '\n';
}
int main() {
int t; cin >> t;
while (t --> 0) {
solve();
}
}
$\\$
(Đã AC)
$\\$
$\\$
$\color{#ffd710}{\texttt{\{}} \color{#8655d6}{\texttt{\{}}\ \ \color{#8cdcda}{\text{Daoanhviet96}}\ \ \color{#8655d6}{\texttt{\}}} \color{#ffd710}{\texttt{\}}}$
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
if (b == 0) return a;
return gcd(b, a % b);
}
long long lcm(long long a, long long b) {
return (a * b) / gcd(a,b);
}
long long len(long long n) {
long long res = 0;
while (n > 0) {
res++;
n = n / 10;
}
return res;
}
void print(long long x,long long y,long long z,long long n) {
long long bcnn = lcm(lcm(x,y),z);
long long m = pow(10, n - 1);
if (len(bcnn) > n) cout << -1;
else if (m % bcnn == 0) cout << bcnn << endl;
else cout << bcnn*(m / bcnn + 1) << endl;
}
int main() {
long long t,x,y,z,n;
cin >> t;
while (t--) {
cin >> x >> y >> z >> n;
print(x,y,z,n);
}
}
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin