tritue.edu.vn


Cho biết chữ số thứ k tính từ phải qua trái của n!

1. Cơ sở toán học

A=a.b

A mod m = ((a mod m) . (b mod m)) mod m

khi tích a x b rất lớn thì ta tính a mod m và b mod m để có thể lấy các a, b nhỏ hơn

2. Vận dụng

- thay vì tính cả tích n!=1.2.3...n, bạn sẽ bị tràn bộ nhớ; khi đó bạn tính: ((1 mod m) . (2 mod m) ....) mod m và bạn có thể phân tách các tích ra nhỏ hơn nữa. Khi đó ta sẽ được kết quả là k chữ số cuối của n! (với m = 10^k). Công thức tổng quát: n! mod 10^k = ​(i mod 10^k ) mod 10^k, i=1, 2, ...n

- VD: n=10, k=1

i 1 2 3 4 5 6 7 8 9 10
i mod 10^1 1 2 3 4 5 6 7 8 9 0
(i mod 10^k ) mod 10^k, i=1, 2, ...n, bằng 0                    

=> như vậy 1 chữ số bên phải của 10! là 0

bây giờ muốn lấy chữ số thứ k của n! từ phải sang thì ta phải tính theo công thức: (T // 10^(k-1)) mod 10. VD: T=8800, k =3 thì chữ số thứ 3 từ phải qua trái của n! là: (8800 // 10^2) mod 10 = 8



Code minh họa

Copy
         
def chuSoThuKTuBenPhai(n, k):
    m = 10**k
    T = 1
    for i in range(1, n+1):
        T = (T * i) % m
    return (T // 10**(k-1)) % 10

n = int(input("n= "))
k= int(input("k= "))
print(f"Chữ số thứ {k} từ phải của {n}! = {chuSoThuKTuBenPhai(n,k)}")



Link chia sẻ bài viết
Copy
            https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qUXlMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D         

Bài viết liên quan