Code tìm bội số chung nhỏ nhất và ước số chung lớn nhất của a và b bị sai

Đề bài đây nhé mọi người:

Sau đây là code của mình, mình code trên hệ thống của trường thì bị Wrong Answer, chưa hiểu lí do tại sao, khi Run trênDev C thì vẫn ra kết quả đúng:

#include <iostream>
using namespace std;

int GCD (int a, int b) {
     
    while (a != b) {
        if (a > b) a = a - b;
        else b = b - a;
    }
    return a;
}
int LCM(int a, int b) {
    return (a*b)/GCD(a,b);
}
int main () {
    int t,a,b;
    cin>>t;
    while (t--) {
        cin>>a>>b;
        cout<<LCM(a,b)<<" "<<GCD(a,b);
        cout<<endl;
    }
    return 0;
}

Anh sử dụng markdown để post bài nhé. Link hướng dẫn : Cách post Code dùng Markdown trong Category Programming

Code bị hide mất vài chỗ. Anh copy lại code đúng rồi dùng markdown đăng lại để mọi người thấy rõ để giúp nhé.

2 Likes

Mình cảm ơn nhiều
^^

a * b trước là tràn số đó :smiley: phải chia trước.

4 Likes

gán a*b=c rồi chia sau được không ạ?

Cũng không tràn được, a * b tối đa là 108 ^ 2.

3 Likes

Cho bộ test sai nè:

1
9 9

Anh thử nghĩ xem sao lại sai đi nhé.

2 Likes

ra 9 9? Mình nghĩ Right chứ

Ước chung nhỏ nhất của 9 và 9 là 9 hay là 1 ạ :thinking:

UCLN ^^, 9 mà bạn :((

2 Likes

Em đọc sai đề :sweat_smile:. Đợi em tí em tìm bộ khác xem. Khả năng chỉ ở 1 số bộ đặc biệt thôi. Nếu sai nữa thì chắc là do máy của trường rồi.

Hệ thống compiler online b ạ :frowning: không biết lúc đi thi cũng cùng compiler đấy có hẹo không nữa

Có khi do kết quả đúng, nhưng “bộ kiểm định” làm “máy móc” quá.
Như:

9 9

khác với

9 9 

^dấu cách ở cuối.

Hoặc:

9 9

khác với

9 9

Cũng có thể máy (thầy) trường làm sai. :smiling_imp:

3 Likes
int GCD (int a, int b) {
     
     int tmp;
    while(b != 0) {
        tmp = a % b;
        a = b;
        b = tmp;
    }
    return a;
}

Mình thay bằng hàm GCD này thấy vẫn không được, cho cả trường hợp bằng 0 vào rồi ạ

thử với 2 số 70000 và 70000 là biết sai chỗ nào ~.~

thử luôn thêm 100 trường hợp 10^8 và 1 là thấy nó chạy chậm

5 Likes

Vậy anh thử đổi kí tự xuất ra màn hình xem. Đổi chỗ LCM và GCD ấy.
cout<<GCD(a,b)<<" "<<LCM(a,b);
Hoặc cũng có thể yêu cầu nhập tất cả bộ test mới đưa ra kết quả. Anh có ví dụ cho output không ạ.
Cũng có thể do tràn số như anh @tntxtnt nói, anh thay bằng unsigned long long int để chống tràn luôn. Đóng bỉm cho biến.

3 Likes

Thì ra là 10^8 à? Cứ tưởng là 108 chứ? @Tu_Tran, dấu ^ đâu mất rồi vậy?

3 Likes

để kiểu của LCM là long long được không ạ

thay cả của biến a,b nữa anh ạ. Tick solution cho anh ấy đi.
@Tu_Tran tick solution cho cmt này của anh @tntxtnt chứ không phải cmt của em -_-

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?