Dalam sistem lotre ini, 10 angka ditarik secara acak dari kumpulan 1 hingga 49. Pemain memilih 5 angka, dan hadiah diberikan berdasarkan berapa banyak angka yang cocok dengan angka yang ditarik.
Ini menciptakan dinamika menarik di mana hadiah yang lebih besar sangat langka, sementara kemenangan yang lebih kecil terjadi relatif lebih sering.
Probabilitas P(k) untuk mencocokkan tepat k angka dari 5 dihitung sebagai:
Di mana:
• C(n,k) mewakili kombinasi (jumlah cara memilih k elemen dari n)
• 5 adalah jumlah angka yang dipilih pemain
• 10 adalah jumlah angka pemenang yang ditarik
• 49 adalah jumlah total angka yang mungkin
P(k) = [C(5,k) × C(44,10-k)] / C(49,10)
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 dari 21.28
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 dari 233
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 dari 7.566
P(menang) = P(3) + P(4) + P(5)
≈ 0.04698 + 0.004295 + 0.000132
≈ 0.0514 ≈ 1 dari 19.45
Ini berarti seorang pemain memiliki peluang sekitar 5.14% untuk memenangkan hadiah apa pun.
/**
* 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);
}