Phát triển bài tính chữ số thứ k từ phải qua trái của n! để tính n! khi n cực lớn
Ý tưởng: - Xác định xem n! có bao nhiêu chữ số (giả sử k số)
- Tính phần chữ số bên phải của n! theo modulo 10^k
Code minh họa
import math
def soChuSo(n):
tonglog = 0
for i in range(1, n + 1):
tonglog += math.log10(i)
tonglog = math.floor(tonglog)
return tonglog + 1;
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= "))
sochuso=soChuSo(n)
S=""
for k in range(1, sochuso+1):
S=str(chuSoThuKTuBenPhai(n,k))+S
print(S)
Code tối ưu hơn
import sys
sys.set_int_max_str_digits(10000000)
import math
def soChuSo(n):
tonglog = 0
for i in range(1, n + 1):
tonglog += math.log10(i)
tonglog = math.floor(tonglog)
return tonglog + 1
def getLastDigits(n, k):
m = 10**k
T=1
for i in range(1, n+1):
T = (T * i) % m
return T
n = int(input("n = "))
sochuso = soChuSo(n)
T = getLastDigits(n, sochuso)
S = str(T).zfill(sochuso)
print(S)
https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qUXpMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D