Đếm Số Chữ Số 0 Liên Tiếp Tận Cùng Của N! - 2KVN
Có thể bạn quan tâm
Đây là một bài tập khá cơ bản về tư duy lập trình. Có nhiều cách để giải nó tuy nhiên ở đây tôi chỉ đề cập đến phương pháp tối ưu nhất.
I) Số số không tận cùng là gì ?
Ở đây nó có nghĩa là bạn đang đi tìm số số 10 xuất hiện trong tích của số đó hay nói cách khác là tìm (2 . 5) trong tích của n!. Vậy một cách cơ bản thì bạn chỉ cần đếm số lượng số hai và số lượng số 5 rồi sau đó chọn số nhỏ hơn.
vd: 10!=1.2.3.4.5.6.7.8.9.10=1.2.3.2.2.5.2.3.7.2.2.2.9.2.510! = 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 = 1 . 2 . 3 . 2 . 2 . 5 . 2 . 3 . 7. 2 . 2 . 2 . 9 . 2 . 5
- số lượng số 5: 2 ;
- số lượng số 2: 8;
=> Vậy chọn số 2 ( ở đây 2 là số lượng số 5). => có 2 số không.
Kiểm tra kết quả: 10!=362880010! = 3628800 (có 2 số không).
Tuy nhiên, có thể dễ dàng nhận thấy rằng số số 2 trong tích của n! luôn lớn hơn số số 5. Thật vậy, bởi trong khoảng từ 1 -> n có khoảng n/2 số 2 (bởi mọi số chẵn đều chứa 2 trong tích (chưa kể đến những số là lũy thừa của 2 như 4,8,..). Còn với số 5 thì chỉ những số có tận cùng là 0, 5 thì mới chứa 5 trong tích.
vd: n=10 khi phân tích ra thành thừa số nguyên tố thì có 8 (có sự chênh lệch tương đối so với n/2) số 2 trong khi chỉ có 2 số 5.
Vậy nên số số 5 trong tích của n! luôn nhỏ hơn số số 2 do đó chỉ cần tìm số lần xuất hiện của 5 trong tích của n!.
II) Giải quyết vấn đề đặt ra:
Đến đây bạn đã biết rằng chỉ cần đếm số số 5 trong tích của n!, lấy một ví dụ: 15!15! có 3 số 5 trong tích => có 3 số không tận cùng của n!.
Vậy đếm số số 5 đó như thế nào???
Như đã đề cập ở trên hay theo kiến thức đã học ở bậc tiểu học thì những số chia hết cho 5 (có 5 trong tích) thì đều tận cùng bởi các số 0 hoặc 5 mà những số chia hết cho 5 sẽ cách đều nhau 5 đơn vị:
5, 10, 15, 20, 25 => Đều chia hết cho 5.
Ta hoàn toàn có thể tính được số lượng số chia hết cho 5 trong khoảng từ 1 -> n bằng phép toán n/5n/5. Phải chăng như thế là đủ??? Cùng đến với một ví dụ:
25!=1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.2525! = 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
Theo công thức thì 25/5=525/5 = 5 nghĩa là có 5 số 0
Tuy nhiên, 25!=1551121004333098598400000025! = 15511210043330985984000000 (có 6 số không) => Kết quả tính của chúng ta thiếu mất một số không.
Vậy số không đó ở đâu???
Hành trình đi tìm số 0 bị thiếu:
Trước hết ta cần phải hiểu rõ tại sao lại thiếu mất một giá trị:
Khi ta lấy n/5 chính là ta đang đếm các số chia hết cho 5. Tuy nhiên số chia hết cho 5 cũng có số this, số that cũng có các số chứa 2, 3, 4, ... số 5 trong tích: 25, 50, 75, 125, 3125, ... Nghĩa là đối với các số này ta không chỉ lấy được 1 số 5 mà còn có thể là 2, 3, 4 số. Do đó ta cần phải định nghĩa lại:
n/5n/5 không còn là có bao nhiêu số 5 trong tích nữa mà là số lượng số có chứa ít nhất một số 5 trong tích.
Vậy theo những gì đã nói ở trên thì ta lại phải tiếp tục tìm các số có chứa ít nhất 2, 3, 4, ... số 5 trong tích. vd: 25=5∗525 = 5*5 => Có 2 số 5 trong tích.
Vậy ta lại tiếp tục tìm các số chia hết cho 5. Giống như trên ta lại sử dụng công thức n/25. Cứ tiếp tục như vậy với 125, 625, các lũy thừa của 5.
Như vậy, một cách tổng quát, ta có:
n5+n52+...+n5k\frac{n}{5} + \frac{n}{5^2} + ... + \frac{n}{5^k}
Code trên C++:
#include <iostream> using namespace std; int main(){ int n; cin>>n; int d=0; while(n>=5){ n=n/5; d+=n; } cout<<d; return 0; }Vậy tại sao lại cứ liên tục n/5, không giống với công thức:
Vì n25=n55\frac{n}{25} = \frac{\frac{n}{5}}{5} nên chỉ cần làm như code là đươc .
Lời kết:
Cảm ơn vì đã xem
Từ khóa » Số 0 Trong C
-
Số Trong C
-
C Cơ Bản: Định Dạng Trong C - DevIOT
-
Làm Sao để Hiển Thị Thêm Số 0 đằng Trước Chữ Số? - Cộng đồng C Việt
-
Nhập 1 Số Tự Nhiên, Loại Bỏ Chữ Số 5 Và 0 Khỏi Số đó - Dạy Nhau Học
-
Hiển Thị Số 0 Vào Phía Trước Một Số - Programming - Dạy Nhau Học
-
Một Vài điều Về Phép Chia Cho Số 0 Trong C [trùng Lặp] - HelpEx
-
0 (số) – Wikipedia Tiếng Việt
-
Các Kiểu Dữ Liệu Trong Lập Trình C/C++ (Data Type) | TopDev
-
Cách Hiện Số 0 Trong Excel [AI CŨNG NÊN BIẾT] - Nhân Hòa
-
Chèn Số 0 đằng Sau Các Số Nguyên Tố Trong Mảng - Học Tốt