tritue.edu.vn


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

Copy
         
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

Copy
         
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)



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

Bài viết liên quan