Chào mừng bạn đến blog Cốc Cốc News Tin Tức Trang Chủ

Table of Content

Video Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là ?

Kinh Nghiệm về Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là 2022

Bùi Xuân Trường đang tìm kiếm từ khóa Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là được Update vào lúc : 2022-05-07 17:39:06 . Với phương châm chia sẻ Thủ Thuật về trong nội dung bài viết một cách Chi Tiết Mới Nhất. Nếu sau khi tham khảo nội dung bài viết vẫn ko hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Admin lý giải và hướng dẫn lại nha.

Nội dung chính
    Example2 Input: 2 20 Output: 14 Example3 Input: 3 5 Output: -1 Giải thích ví dụ: - Ở ví dụ thứ nhất: Chỉ có cặp (2, 10) thỏa mãn ƯCLN(2,10) = 2, BCNN(2,10) = 10. Nên tổng là 12. - Ở ví dụ thứ hai: Có hai cặp (2, 20) và (4, 10) thỏa mãn, tổng nhỏ nhất là 14. - Ở ví dụ thứ ba: Không tìm được cặp nào thỏa mãn ƯCLN là 3 và BCNN là 5. 1. Bội chung nhỏ nhất là gì?2. Các thuật toán tìm bội chung nhỏ nhất của 2 sốC1. Lặp tăng dần cho tới khi tìm được BCNNC2. Tối ưu lặp của cách 1C3. Phân tích thừa số nguyên tốC4. Tìm BCNN của 2 số nhờ vào UCLNC5. Sử dụng hàm lcm có sẵn ở C++17Video liên quan

Với hai số nguyên dương A, B cho trước. Ta thuận tiện và đơn giản tìm được ước chung lớn số 1 G và bội chung nhỏ nhất L của hai số AB.

Bây giờ tất cả chúng ta hãy xét bài toán ngược của bài toán trên:

“Cho biết trước ước chung lớn số 1 G và bội chung nhỏ nhất L của hai số nguyên dương AB.

Rõ ràng, sẽ có rất nhiều cặp (A, B) nguyên dương có ước chung lớn số 1 là G và bội chung nhỏ nhất là L, tuy nhiên cũng luôn có thể có trường hợp tất cả chúng ta không thể tìm được giá trị A, B thỏa mãn. Hãy xác định giá trị nhỏ nhất của tổng A + B, hoặc đưa ra   -1 nếu không tìm được cặp (A, B)”.

Input

    Hai số nguyên dương GL (1 ≤ GL ≤ 109).

Output

    Số nguyên dương là tổng nhỏ nhất hoàn toàn có thể. Trong trường hợp không tìm được hai số AB thì đưa ra kết quả là -1.

Example1

Input: 2 10 Output: 12

Example2 Input: 2 20 Output: 14

Example3 Input: 3 5 Output: -1 Giải thích ví dụ: - Ở ví dụ thứ nhất: Chỉ có cặp (2, 10) thỏa mãn ƯCLN(2,10) = 2, BCNN(2,10) = 10. Nên tổng là 12. - Ở ví dụ thứ hai: Có hai cặp (2, 20) và (4, 10) thỏa mãn, tổng nhỏ nhất là 14. - Ở ví dụ thứ ba: Không tìm được cặp nào thỏa mãn ƯCLN là 3 và BCNN là 5.

    lý thuyết trắc nghiệm hỏi đáp bài tập sgk

xác định bài toán và xây dựng thuật toán

1. tìm ước chung lớn số 1 của hai số a, b

2. tìm bội chung nhỏ nhất của 2 số nguyên dương a,b

Các thắc mắc tương tự

giúpmìnhviết thuật toán tìm bội số chung nhỏ nhất của 2 số A và B , biết A và B nguyên dương . Mình cảm ơn ạ

This entry is part 23 of 69 in the series Học C Không Khó

84 / 100

Tìm bội chung nhỏ nhất của 2 số – Chương trình tìm BCNN của 2 số là một bài tập cơ bản giúp những bạn sinh viên rèn luyện tư duy lập trình. Trong nội dung bài viết này, Nguyễn Văn Hiếu sẽ cùng những bạn đi tìm những phương pháp rất khác nhau để giải bài tập tìm bội chung nhỏ nhất của 2 số nguyên dương. Mỗi cách làm đều sẽ có ý tưởng rõ ràng, cách triển khai và code tìm bcnn minh họa theo cách đó.

1. Bội chung nhỏ nhất là gì?

Theo Wikipedia,

Trong số học, bội số chung nhỏ nhất (hay còn gọi tắt là bội chung nhỏ nhất, viết tắt là BCNN, tiếng Anh: least common multiple hoặc lowest common multiple (LCM) hoặc smallest common multiple) của hai số nguyên a và b là số nguyên dương nhỏ nhất chia hết cho tất cả a và b.[1] Tức là nó hoàn toàn có thể chia cho a và b mà không để lại số dư. Nếu a hoặc b là 0, thì không tồn tại số nguyên dương chia hết cho a và b, khi đó quy ước rằng LCM(a, b) là 0.

Định nghĩa trên đôi khi được tổng quát hoá cho hơn hai số nguyên dương: Bội chung nhỏ nhất của a1,…, an là số nguyên dương nhỏ nhất là bội số của a1,…, an.

2. Các thuật toán tìm bội chung nhỏ nhất của 2 số

Ta có một số trong những nhận xét như sau: Theo định nghĩa, BCNN của 2 số a và là số nhỏ nhất chia hết cho tất cả hai số a và b. Như vậy, Nếu gọi lcm = BCNN(a, b); Khi đó, ta hoàn toàn có thể biết chắc như đinh rằng max(a, b) <= lcm <= a*b.

Nắm rõ tính chất này, ta hoàn toàn có thể đi vào một số trong những thuật toán tìm BCNN như sau:

C1. Lặp tăng dần cho tới khi tìm được BCNN

Cách này ý tưởng khá là đơn giản, ta chỉ việc tiến hành lặp từ nhỏ tới lớn những số trong đoạn từ [max(a, b),a*b](gồm có cả hai đầu mút). Số đầu tiên chia hết cho tất cả a và b sẽ là BCNN của a và b.

Đánh giá: Cách này trong trường hợp xấu nhất sẽ cần a*b – max(a, b) lần lặp. Vẫn với ý tưởng này nhưng sẽ được tối ưu ở C2

#include

#include

int main()

    int a = 5, b = 7, lcm;

    int maxV = a*b;

    for(int i = std::max(a, b); i <= maxV; i++)

        if(i % a == 0 && i % b == 0)

            lcm = i;

            break;

        

    

    printf("BCNN(%d, %d) = %d", a, b, lcm);

Chạy thử xem sao:

C2. Tối ưu lặp của cách 1

BCNN của 2 số a và b phải chia hết cho tất cả hai số này. Do đó, ta hoàn toàn có thể chỉ việc duyệt qua những số chia hết cho một số trong những(hoặc a, hoặc b). Nhưng để tối ưu, bạn hãy duyệt qua những số chia hết cho max(a, b).

Ví dụ: a = 5, b = 7. Vậy những số tất cả chúng ta nên duyệt qua những số chia hết cho 7 là 7, 14, 21, 28, 35. Như vậy, tất cả chúng ta giảm được rất nhiều số lần lặp rồi.

Đánh giá: Cách này số lần lặp trong trường hợp xấu nhất là a*b / max(a, b).

#include

#include

int main()

    int a = 5, b = 7, lcm;

    int maxV = a*b;

    int step = std::max(a, b);

    for(int i = step; i <= maxV; i+= step)

        if(i % a == 0 && i % b == 0)

            lcm = i;

            break;

        

    

    printf("BCNN(%d, %d) = %d", a, b, lcm);

Chạy thử chương trình:

C3. Phân tích thừa số nguyên tố

Sử dụng cách tìm bcnn đã học trong toán cấp 2:

    Bước 1: Phân tích mỗi số ra thừa số nguyên tố. Bước 2: Chọn ra những thừa số nguyên tố chung và riêng. Bước 3: Lập tích những thừa số đã chọn, mỗi thừa số lấy với số mũ lớn số 1 của nó. Tích đó là BCNN cần tìm.

Cách này mình đánh giá chỉ thuận tiện cho tính toán trên giấy, việc thực hiện code phức tạp hơn và tốc độ cũng không thật tốt.

Lưu ý: Để code ngắn gọn nhất, mình sẽ sử dụng những cấu trúc STL của C++ và tính năng for auto của C++11

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

#include

#include

#include

#include

using namespace std;

int main()

    int a = 5, b = 7, lcm;

    map ma, mb;

    set s;

    for(int i = 2; a < i; ++i)

        while(a % i == 0)

            ma[i]++;

            a /= i;

            s.insert(i);

        

    

    if(a > 1)

        ma[a]++;

        s.insert(a);

    

    for(int i = 2; b < i; ++i)

        while(b % i == 0)

            mb[i]++;

            b /= i;

            s.insert(i);

        

    

    if(b > 1)

        mb[b]++;

        s.insert(b);

    

    lcm = 1;

    for(auto it : s)

        lcm *= pow(it, max(ma[it], mb[it]));

    

    printf("BCNN(%d, %d) = %d", a, b, lcm);

Cách này những bạn hoàn toàn có thể tham khảo và bạn hoàn toàn có thể tối ưu thêm. Mình sẽ không lý giải sâu vì thực tế, thuật toán tìm bcnn này triển khai khá rườm rà và không tối ưu.

C4. Tìm BCNN của 2 số nhờ vào UCLN

Dưới đây là sơ đồ khối tìm bội chung nhỏ nhất của 2 số:

Sơ đồ khối tìm BCNN của 2 số

Khi đó, ta có công thức: BCNN(a, b) = a*b / UCLN(a,b)

Các bạn hoàn toàn có thể xem những thuật toán tìm UCLN của 2 số, dưới đây là code tham khảo tìm bội chung nhỏ nhất theo UCLN giống sơ đồ khối phía trên:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#include

#include

#include

#include

using namespace std;

int gcd(int a, int b) b == 0)

        return a + b;

    

    while (a != b)

        if (a > b)

            a -= b; // a = a - b

        else

            b -= a;

        

    

    return a; // return a or b, b?i vì thời điểm hiện nay a và b b?ng nhau

int main()

    int a = 5, b = 7;

    int lcm = a * b / gcd(a, b);

    printf("BCNN(%d, %d) = %d", a, b, lcm);

C5. Sử dụng hàm lcm có sẵn ở C++17

Hàm này chỉ có ở C++17, và cách sử dụng rất đơn giản:

#include

#include

#include

using namespace std;

int main()

    int a = 5, b = 7;

    int ans = lcm(a, b);

    printf("BCNN(%d, %d) = %d", a, b, ans);

Review Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là ?

Bạn vừa đọc Post Với Một số hướng dẫn một cách rõ ràng hơn về Clip Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là tiên tiến nhất

Share Link Down Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là miễn phí

Pro đang tìm một số trong những Chia SẻLink Download Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là miễn phí.

Hỏi đáp thắc mắc về Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là

Nếu sau khi đọc nội dung bài viết Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là vẫn chưa hiểu thì hoàn toàn có thể lại phản hồi ở cuối bài để Mình lý giải và hướng dẫn lại nha #Output #của #bài #toán #tìm #bội #số #chung #nhỏ #nhất #của #số #nguyên #dương #và #là - 2022-05-07 17:39:06 Output của bài toán tìm bội số chung nhỏ nhất của 2 số nguyên dương a và b là

Post a Comment