Sign Up

Browse

Một cộng 9 bằng mấy? ( 10 )

Have an account? Sign In Now

Sign In

Một cộng 9 bằng mấy? ( 10 )

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask question.

Một cộng 9 bằng mấy? ( 10 )

Forgot Password?

Need An Account, Sign Up Here
Lời Giải 247 Logo Lời Giải 247 Logo
Sign InSign Up

Lời Giải 247

Lời Giải 247 Navigation

  • Hoá Học
  • Toán Học
  • Vật Lý
  • Toán Học
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Hoá Học
  • Toán Học
  • Vật Lý
  • Toán Học

Lời giải đáp cho hàng vạn thắc mắc của bạn!

Hãy giúp đỡ người khác giải quyết rắc rối, và rắc rối của bạn sẽ biến mất.

Create A New Account
Home/ Questions/Q 28096
Next
In Process
linhdan3674
linhdan3674

linhdan3674

  • 141 Questions
  • 216 Answers
  • 0 Best Answers
  • 3 Points
View Profile
  • 0
linhdan3674
Asked: 18 Tháng 11 , 20202020-11-18T12:25:00+00:00 2020-11-18T12:25:00+00:00In: Lớp 10, Tin học

Để trình bày thuật toán tìm ucln theo cách tối ưu nhất ta làm chi tiết như thế nào?

  • 0

Để trình bày thuật toán tìm ucln theo cách tối ưu nhất ta làm chi tiết như thế nào?

Lời giải tham khảo có thể có AI hỗ trợ và kiểm tra tự động, không mặc nhiên đã được chuyên gia duyệt. Quy trình biên tập · Ban biên tập

Báo sai lời giải

  • 1 1 Answer
  • 4 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook

    1 Answer

    • Voted
    • Oldest
    • Recent
    1. vudai1247
      2020-11-18T12:25:00+00:00Added an answer on 18 Tháng 11 , 2020 at 12:25 chiều

      Cách 1. Tìm UCLN sử dụng phép trừ

      Đây là sơ đồ của thuật toán này

      Thuật toán tìm ước chung lớn nhất sử dụng phép trừ

      Thuật toán tìm ước chung lớn nhất sử dụng phép trừ

      Code minh họa

      0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      // Code from https://nguyenvanhieu.vn

      int gcd(int a, int b){

      // Nếu a = 0 => ucln(a,b) = b

      // Nếu b = 0 => ucln(a,b) = a

      if (a == 0 || 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ì lúc này a và b bằng nhau

      }

      Giải thích:

      0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      Tại mỗi bước lặp nó sẽ kiểm tra giá trị hiện tại của a và b xem thằng nào lớn hơn.

      Ví dụ với hai số a = 7, b = 5

      L1: a > b => a = 2, b = 5

      L2: b > a => a = 2, b = 3

      L3: b > a => a = 2, b = 1

      L4: a > b => a = 1, b = 1

      L5: a == b => trả về a hoặc b đều được => KQ là 1

      Xem thêm: Các chia sẻ hay được đúc kết từ kinh nghiệm của tác giả

      Cách 2. Tìm UCLN sử dụng phép chia dư

      Sơ đồ thuật toán tương tự như cách 1. Chỉ thay đổi phép trừ sang phép chia dư.

      Code minh họa

      0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      // Code from https://nguyenvanhieu.vn

      int gcd(int a, int b){

      // Lặp tới khi 1 trong 2 số bằng 0

      while (a*b != 0){

      if (a > b){

      a %= b; // a = a % b

      }else{

      b %= a;

      }

      }

      return a + b; // return a + b, bởi vì lúc này hoặc a hoặc b đã bằng 0.

      }

      Cách 3. Tìm UCLN sử dụng giải thuật Euclid

      Cho a, b là hai số nguyên (giả sử a ≥ b), để tìm ước chung lớn nhất của hai số a và b ta cần thực hiện chia a cho b được thương q và số dư r (r ≥ 0) tức là a = b*q + r, khi đó ta có:

      Thuật toán tìm ước chung lớn nhất của hai số nguyên sử dụng C++

      Cài đặt thuật toán sử dụng đệ quy.

      0

      1

      2

      3

      4

      5

      6

      7

      // Code from https://nguyenvanhieu.vn

      int gcd(int a, int b) {

      if (b == 0) return a;

      return gcd(b, a % b);

      }

      Cài đặt khử đệ quy

      0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      // Code from https://nguyenvanhieu.vn

      int gcd(int a, int b) {

      int tmp;

      while(b != 0) {

      tmp = a % b;

      a = b;

      b = tmp;

      }

      return a;

      }

      Gợi ý: Một số bài viết về giải thuật tương tự

      Cách 4. Tìm UCLN sử dụng hàm có sẵn của C++

      Để có thể sử dùng hàm tìm ucln trong C++ ta cần thêm thư viện algorithm.

      Ví dụ minh họa:

      0

      1

      2

      3

      4

      5

      6

      7

      8

      // Code from https://nguyenvanhieu.vn

      #include

      #include

      int main(){

      int a = 5, b = 9;

      printf(“\ngcd(%d, %d) = %d”, a, b, std::__gcd(a,b));

      }

      Tổng kết tất cả cách cách trên trong 1 chương trình.

      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

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      // Code from https://nguyenvanhieu.vn

      #include

      #include

      int gcd1(int a, int b){

      // Nếu a = 0 => ucln(a,b) = b

      // Nếu b = 0 => ucln(a,b) = a

      if (a == 0 || 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ì lúc này a và b bằng nhau

      }

      int gcd2(int a, int b){

      // Nếu a = 0 => ucln(a,b) = b

      // Nếu b = 0 => ucln(a,b) = a

      if (a == 0 || b == 0){

      return a + b;

      }

      // Lặp tới khi 1 trong 2 số bằng 0

      while (a*b != 0){

      if (a > b){

      a %= b; // a = a % b

      }else{

      b %= a;

      }

      }

      return a + b; // return a + b, bởi vì lúc này hoặc a hoặc b đã bằng 0.

      }

      int gcd3(int a, int b) {

      if (b == 0) return a;

      return gcd3(b, a % b);

      }

      int gcd4(int a, int b) {

      int tmp;

      while(b != 0) {

      tmp = a % b;

      a = b;

      b = tmp;

      }

      return a;

      }

      int main(){

      int a = 5, b = 9;

      printf(“\ngcd1(%d, %d) = %d”, a, b, gcd1(a,b));

      printf(“\ngcd2(%d, %d) = %d”, a, b, gcd2(a,b));

      printf(“\ngcd3(%d, %d) = %d”, a, b, gcd3(a,b));

      printf(“\ngcd4(%d, %d) = %d”, a, b, gcd4(a,b));

      printf(“\ngcd5(%d, %d) = %d”, a, b, std::__gcd(a,b));

      }

      Kết quả chạy thử

      0

      1

      2

      3

      4

      5

      6

      gcd1(5, 9) = 1

      gcd2(5, 9) = 1

      gcd3(5, 9) = 1

      gcd4(5, 9) = 1

      gcd5(5, 9) = 1

      CHÚC BN HỌC TỐT

      • 0
      • Reply

    Bài tương tự

    • Viết chứng trình nhập 3 số nguyên từ bàn phím
    • viết chương trình tìm tất cả các ước không âm của n,với n nhập từ bàn phím
    • viết chương trình tìm tất cả các ước ko âm của n , với n nhập từ bàn phím
    • Xay dung thuat toan cho Nla so nguyen to khi N khong co uoc nao trong pham vi tu 2 den canN
    • Cho dãy số a1, a2, …. , an; gồm n số nguyên. A: viết thuật toán liệt kê các phần tử bé hơn 0. B: vẽ sơ đồ khố…
    • Bài toan Tìm ucln có mấy thuật toán để giải và nên chọn thuật toán nào để giải.
    Leave an answer

    Leave an answer
    Hủy

    Browse

    Sidebar

    Explore

    • Feed
    • Recent Questions
    • Most Answered
    • Answers
    • No Answers
    • Most Visited
    • Most Voted
    • Random

    © 2026 Loigiai247. All Rights Reserved
    With Love by loigiai247.com.

    Giới thiệu · Chính sách biên tập · Ban biên tập · Liên hệ