PHÉP CHIA LẤY PHẦN DƯ TRONG C

Nội dung 1. Chút kiến thức và kỹ năng căn bản cần sẵn sàng

1. Chút kiến thức và kỹ năng căn bản cần chuẩn chỉnh bị

1.1) Một vài định nghĩa cơ bản về số học

khi ta nói rằng phân chia hết mang lại (, là các số nguyên) thì ta viết một giải pháp ngắn gọn như sau: . Tức là . = ( là số nguyên). Một vài nguyên là số nguyên tố ví như nó chỉ phân chia hết cho 1 và chủ yếu nó. Một vài nguyên nếu chưa phải là số nguyên tố thì được call là hợp số.

Bạn đang xem: Phép chia lấy phần dư trong c

Bạn đang xem: Phép phân chia lấy dư trong c

1.2) Định lý

Với a, b, c, x, y là các số nguyên, thì:

Nếu với thì . Nếu với thì . Nếu và thì .

Việc chứng tỏ các định lý trên không thật phức tạp, mình vẫn nhường các bước thú vị này cho chính mình đọc. Nếu khách hàng có vướng mắc gì hãy thoải mái phản hồi xuống mặt dưới nội dung bài viết nhé!

Mình bonus 2 sự việc nho nhỏ dại sau với chúng ta đọc tò mò

1) Hãy chứng minh nếu một trong những nguyên là một trong những lẻ thì luôn chia hết đến 8.

2) Liệu rằng là số nguyên tố với tất cả số nguyên ?

1.3) Một vài đặc điểm của phép chia lấy dư

Phép phân tách lấy dư chắc rằng đã rất rất gần gũi với nhiều người, chúng ta đã được học nó từ cấp 1, ví dụ như 9 phân chia 8 dư 1. Fan ta cam kết hiệu phép chia lấy dư là mod, trong vô số nhiều ngôn ngữ lập trình họ có ký kết hiệu % với ý nghĩa sâu sắc tương đương. Ví dụ: 9 gian lận 8 = 1 xuất xắc 9%8 = 1

1.3.1) Định nghĩa

Với cùng là những số nguyên, ta quan niệm phép phân tách lấy dư như sau:

Trong đó là phép phân tách lấy phần nguyên. Ví dụ, yêu cầu .Bạn có thể thử vài ba số bất kỳ để kiểm bệnh định nghĩa trên. Có nhiều ứng dụng khá tuyệt của phép chia lấy dư dẫu vậy mình sẽ không còn đề cập ở bài viết này nhằm tránh lan man.

1.4) Ước chung lớn nhất (greatest common divisor)

1.4.1) Định nghĩa một số trong những nguyên được gọi là ước chung của cùng nếu cùng cùng phân chia hết mang đến , xuất xắc nói phương pháp khác, khi cùng . Ước chung khủng nhất của và , hai số nguyên khác 0, được khái niệm là số nguyên phệ nhất trong những ước chung của và . Ta ký hiệu là như sau:1.4.2) Định lý Nếu và là những số nguyên thì . Nếu cùng là những số nguyên thì . Nếu như , cùng là các số nguyên thì

Định lý 1 với 2 mình sẽ để cho bạn đọc tự triệu chứng minh, bản thân chỉ minh chứng định lý 3, đây cũng đó là định lý nền tảng cho giải thuật Euclid.

*

Chứng minh Định lý 3:

Ta cần chứng tỏ rằng ước chung của cùng giống với ước chung của cùng .Giả sử rằng cùng thì với (, là những số nguyên). Lúc đó ta có:

Từ kia suy ra là ước của . Vậy là ước chung của với .Ngược lại, ta trả sử là ước chung của và thì và với , là các số nguyên. Lúc ấy ta có:

Từ đó suy ra là ước chung của với .

Xem thêm: Hướng Dẫn Cách Đổi Tên Liên Minh Miễn Phí ❤️ Thẻ Đổi Tên Lol Free

Từ định lý 3 ta đúc kết 1 hệ quả đặc biệt quan trọng là căn nguyên cho lời giải Euclid.

1.4.3) Hệ trái Định lý 3Hệ quả:

Với cùng là các số nguyên, thì

Chứng minh:

Nhớ lại chút về tư tưởng của phép phân chia lấy dư: , suy ra với . Cho nên hệ trái là đúng.

Áp dụng hệ quả:

Bây giờ bọn họ sẽ sử dụng hệ quả bên trên kết phù hợp với Định lý 2 mục 1.4.2) để tính ước chung béo nhất của 2 số nguyên bất kỳ. Ví dụ, ta mong tính , các bước như sau:

gcd(64, 24) = gcd(64 gian lận 24, 24) = gcd(16, 24) = gcd(24 gian lận 16, 16) = gcd(8, 16) = gcd(16 mod 8, 8) = gcd(0, 8) = 8Như vậy . Bạn cũng có thể thử với các số khác giả dụ muốn.

2. Giải thuật Euclid

Thực ra khi triển khai ví dụ trên là bạn đang hoạt động giải thuật Euclid rồi đấy. :))

Giải thuật Euclid thực ra là giải thuật giúp cho bạn tính được ước chung bự nhất của 2 số nguyên bất kỳ, dựa trên cơ sở toán học tập mà bọn họ đã đề cập và minh chứng ở trên.Có thể nhiều người đang cảm thấy lời giải này cũng chẳng mang lại lợi ích được gì lắm đúng không ? Điểm thú vị của lời giải Euclid ở trong phần nó góp chúng tiến hành việc tính với những số béo khá nhanh. Bài viết sau mình đã demo việc này tương tự như thử cẩn thận độ phức tạp của giải mã này.

Bây giờ họ sẽ implement giải mã Euclid bởi code C++ nhé. Ta làm cho đúng theo các bước như lúc ta thực hiện ví dụ trước thôi.

1234567891011int gcd(int a, int b) int c = b; a = abs(a); b = abs(b); while(b > 0) c = b; b = a%b; a = c; return a;
Kiến thức có vẻ nhiều nhưng khi code tất cả mấy chiếc nhỉ. :))

Ta phân biệt ở đây có sự tái diễn của chính hàm , do vậy ta rất có thể đệ quy đến khi nào một trong hai số hoặc bằng 0. Sau đấy là implement giải mã Euclid theo phong cách đệ quy.

12345678910int gcdRecursion(int a, int b) int c; a = abs(a); b = abs(b);if(b > 0) c = gcdRecursion(b,a%b); else c = a; return c;
Mình tạm bợ kết phần 1 trên đây, trong nội dung bài viết sau mình sẽ phân tích độ tinh vi của lời giải Euclid và đề cập giải mã Euclid mở rộng.Bạn đọc nếu tất cả gì ý muốn góp ý gì về nội dung bài viết thoải mái comment cùng nếu cảm thấy bài viết bổ ích thì hãy share để bạn bè cùng phát âm nhé!