Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
727
333
ý tưởng:
Ta có các nhận xét:
- UCLN(a, b) * BCNN(a, b) = a * b -> do đó chỉ cần biết a là có thể tìm được b
- BCNN(a, b) thì chia hết cho a và a chia hết cho UCLN(a, b) -> ta có thể duyệt a là ước của BCNN(a, b)
code :
#pragma GCC optimize ("O3")
#include <bits/stdc++.h>
using namespace std;
const long long nmax = 1e6 + 5;
ll n , m , resa , resb;
void seive(ll a)
{
ll b = n / a * m;
if(__gcd(a , b) == m and a + b < resa + resb)
{
resa = a , resb = b;
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
cin >> m >> n;
resa = resb = 1e12;
for (ll i = 1; i <= sqrt(n); ++i)
{
if(n % i == 0)
{
if(i % m == 0) seive(i);
if(n / i % m == 0) seive(n / i);
}
}
if(resa + resb == 2e12) cout << -1;
else cout << resa + resb;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
81
2628
182
t chạy themis hong có full á =)))
81
2628
182
dịch lỗi
727
9783
333
lỗi chỗ nào