Draw Code used by Flicker

Xác suất trúng xổ số

Tổng quan về trò chơi

Trong hệ thống xổ số này, 10 số được rút ngẫu nhiên từ nhóm 1 đến 49. Người chơi chọn 5 số và giải thưởng được trao dựa trên số lượng số trùng khớp với các số đã rút.

Quy tắc phân phối giải thưởng

  • Yêu cầu tối thiểu để trúng bất kỳ giải thưởng nào là trùng khớp 3 số.
  • Nếu có một người thắng với 5 số trùng, họ nhận 100% tổng SUPER JACKPOT được phân bổ.
  • Nếu chỉ có 1 người thắng với 4+ số trùng, họ nhận 100% giải JACKPOT được phân bổ.
  • Với 2 người thắng có 4+ số trùng, giải thưởng được phân phối 62.5%/37.5%.
  • Đối với người thắng 3 số trùng, chỉ 50% tổng giải thưởng được phân bổ, chia theo tỷ lệ 30%/15%/5% cho vị trí thứ 1/2/3 tương ứng.

Điều này tạo ra một động lực thú vị, nơi các giải thưởng lớn đặc biệt hiếm, trong khi các giải nhỏ hơn xuất hiện thường xuyên hơn một cách tương đối.

Tính toán xác suất

Xác suất P(k) để trùng khớp chính xác k số trong 5 số được tính như sau:

P(k) = [C(5,k) × C(44,10-k)] / C(49,10)

Trong đó:
• C(n,k) đại diện cho tổ hợp (số cách chọn k phần tử từ n)
• 5 là số lượng số người chơi chọn
• 10 là số lượng số trúng được rút
• 49 là tổng số số có thể có

Phân tích tính toán xác suất

Công thức phân phối siêu bội (Hypergeometric Distribution Formula)

P(k) = [C(5,k) × C(44,10-k)] / C(49,10)

3 số trùng

P(3) = [C(5,3) × C(44,7)] / C(49,10)

= (10 × 38,608,020) / 8,217,822,536

≈ 386,080,200 / 8,217,822,536

≈ 0.04698 ≈ 1 trong 21.28

4 số trùng

P(4) = [C(5,4) × C(44,6)] / C(49,10)

= (5 × 7,059,052) / 8,217,822,536

≈ 35,295,260 / 8,217,822,536

≈ 0.004295 ≈ 1 trong 233

5 số trùng (SUPER JACKPOT)

P(5) = [C(5,5) × C(44,5)] / C(49,10)

= (1 × 1,086,008) / 8,217,822,536

≈ 1,086,008 / 8,217,822,536

≈ 0.000132 ≈ 1 trong 7,566

Xác suất thắng tổng thể (≥3 số trùng)

P(thắng) = P(3) + P(4) + P(5)

≈ 0.04698 + 0.004295 + 0.000132

≈ 0.0514 ≈ 1 trong 19.45

Điều này có nghĩa là người chơi có khoảng 5.14% cơ hội thắng bất kỳ giải thưởng nào.

Những phát hiện chính

  • Tỷ lệ trúng giải độc đắc thực tế (5 số trùng) là 1 trong 7,566
  • Cơ hội trúng bất kỳ giải thưởng nào (≥3 số trùng) là 1 trong 19.45

The method used for Draw

            
              /**               
               * Generates an array of unique random integers within a specified range in sorted order.
               *
               * Performed daily for draws with parameters of generateUniqueRandomSortedIntegers(10, 1, 49)
               *
               *
               * @param {number} count - The number of unique integers to generate (must be positive)
               * @param {number} min - The lower bound of the range (inclusive)
               * @param {number} max - The upper bound of the range (inclusive)
               * @returns {number[]} A sorted array of unique random integers
               * @throws {Error} If the requested count exceeds the possible unique values in the range
               * or if any parameter is invalid
               */
              function generateUniqueRandomSortedIntegers(count, min, max) {
                // Validate input parameters
                if (!Number.isInteger(count) || !Number.isInteger(min) || !Number.isInteger(max)) {
                  throw new Error("All parameters must be integers");
                }

                if (count <= 0) {
                  throw new Error("Count must be a positive integer");
                }

                if (min > max) {
                  throw new Error("Minimum value cannot exceed maximum value");
                }

                const rangeSize = max - min + 1;
                if (count > rangeSize) {
                  throw new Error(`Cannot generate ${count} unique numbers in range [${min}, ${max}]`);
                }

                // For small ranges relative to count, use Fisher-Yates shuffle algorithm
                if (count > rangeSize / 2) {
                  const allNumbers = Array.from({length: rangeSize}, (_, i) => min + i);

                  // Fisher-Yates shuffle
                  for (let i = allNumbers.length - 1; i > 0; i--) {
                    const j = Math.floor(Math.random() * (i + 1));
                    [allNumbers[i], allNumbers[j]] = [allNumbers[j], allNumbers[i]];
                  }

                  return allNumbers.slice(0, count).sort((a, b) => a - b);
                }

                // For larger ranges relative to count, use Set approach
                const uniqueNumbers = new Set();
                while (uniqueNumbers.size < count) {
                  const randomNumber = Math.floor(Math.random() * rangeSize) + min;
                  uniqueNumbers.add(randomNumber);
                }

                return Array.from(uniqueNumbers).sort((a, b) => a - b);
              }