Code tính thặng dư Trung Hoa bị sai

Em theo em tìm hiểu thì bài thặng dư trung hoa này chỉ có cách tính này như mà thầy mình lại nói code này không tốt và khi nộp thì toàn báo sai dù mình sửa đủ kiểu, xin mọi người xem giúp mình sai ở đâu ạ!

Cho 4 số nguyên a, n, b, m, hãy tìm x thỏa mãn x=a(mod n), x=b(mod m) và 0≤x<K với
K=nm (1≤n,m≤10^9, 0≤a<n, 0≤b<m). Biết gcd(n,m)=1, với khoảng 100 test

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll d,x,y;
void extendedEuclid(ll A,ll B)
{
    if(B==0)
    {
        d=A;
        x=1;
        y=0;
    }
    else
    {
        extendedEuclid(B,A%B);
        ll temp=x;
        x=y;
        y=temp-(A/B)*y;
    }
}
ll modinverse(ll A,ll M)
{
    extendedEuclid(A,M);
    return (x%M+M)%M;
}
ll minx(ll a,ll n,ll b,ll m,ll k)
{
    ll result=a*m*modinverse(m,n)+b*n*modinverse(n,m);
    return result%k;
}
int main()
{
    ll t;
    cin>>t;
    while(t-->0)
    {
        ll a,n,b,m;
        cin>>a>>n>>b>>m;
        ll k=n*m;
        ll z=minx(a,n,b,m,k);
        cout<<z<<" "<<k<<endl;
    }
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?