Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Xác suất - Thống kê] Mô phỏng Monte Carlo: bộ sinh số giả ngẫu nhiên LCG

    Mọi mô phỏng Monte Carlo trên máy tính đều cần một bộ sinh số giả ngẫu nhiên (pseudo-random number generator) để đảm bảo có thể lặp lại được. Một bộ sinh đơn giản và kinh điển là bộ sinh đồng dư tuyến tính (Linear Congruential Generator - LCG):

    Xi+1=(a⋅Xi+c) mod mX_{i+1} = (a \cdot X_i + c) \bmod mXi+1​=(a⋅Xi​+c)modm

    bắt đầu từ giá trị khởi tạo (seed) X0X_0X0​. Từ dãy X1,X2,…,XnX_1, X_2, \ldots, X_nX1​,X2​,…,Xn​ sinh ra, ta chuẩn hóa về đoạn [0,1)[0,1)[0,1) bằng Ui=Xi/mU_i = X_i / mUi​=Xi​/m — đây chính là các số "ngẫu nhiên" dùng để chạy mô phỏng Monte Carlo.

    Cho X0,a,c,m,nX_0, a, c, m, nX0​,a,c,m,n, hãy sinh và in ra nnn giá trị U1,U2,…,UnU_1, U_2, \ldots, U_nU1​,U2​,…,Un​.

    Ví dụ: X0=1,a=1,c=1,m=2,n=5X_0=1, a=1, c=1, m=2, n=5X0​=1,a=1,c=1,m=2,n=5: dãy XXX là 0,1,0,1,00,1,0,1,00,1,0,1,0 nên dãy UUU là 0.000000 0.500000 0.000000 0.500000 0.000000.

    • Định dạng đầu vào:

      Một dòng duy nhất gồm 5 số nguyên cách nhau bởi khoảng trắng: X0 a c m nX_0\ a\ c\ m\ nX0​ a c m n (0≤X0<m0 \le X_0 < m0≤X0​<m, 0≤a,c≤1090 \le a, c \le 10^90≤a,c≤109, 1≤m≤2311 \le m \le 2^{31}1≤m≤231, 0≤n≤1050 \le n \le 10^50≤n≤105).

    • Định dạng đầu ra:

      In trên một dòng nnn số thực U1,…,UnU_1,\ldots,U_nU1​,…,Un​ (làm tròn đúng 6 chữ số thập phân), cách nhau bởi khoảng trắng. Nếu n=0n=0n=0, in ra một dòng trống.

    Ví dụ:

    Đầu vào:

    0 0 0 1 0

    Đầu ra:

    
    

    Đầu vào:

    1 1 1 2 5

    Đầu ra:

    0.000000 0.500000 0.000000 0.500000 0.000000
    

    Đang tải editor...