Измени пожалуйста скрипт, не правильно работает. 
Неверное распределение джекпота. 
Должно быть так: Например купили 1000 билетов на 1500 грн.
Призовой фонд 70% от количества купленных билетов на тираж
Призовой фонд игры делится так, от суммы продажи 1500 грн отнимаем 30%, остаётся 70%. это 1050грн.
Вот с этой 1050грн распределяем, 30% это делится среди всех где 3 номера, 40% среди 4 угаданных номеров, 40% если выиграли джекпот. И вот тут самое основное. Если 40% этих не выиграл в этом тираже, ровно 40% переносятся на следующий тираж + 40% уже нового тиража, по сути наполнение джекпота не более 40% от призового фонда. Ни на копейку больше.
Исправь этот момент. И чтобы номера выпадали абсолютно в случайном порядке. 

<?php
session_start();

// Initialize session variables if not set
if (!isset($_SESSION['tickets'])) {
    $_SESSION['tickets'] = [];
    $_SESSION['drawn_numbers'] = [];
    $_SESSION['ticket_counter'] = 1;
    $_SESSION['jackpot'] = 0.00;
    $_SESSION['draw_number'] = 1;
    $_SESSION['current_draw'] = [];
}

// Handle form submissions
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['generate_tickets'])) {
        $quantity = intval($_POST['quantity']);
        generateTickets($quantity);
    } elseif (isset($_POST['start_draw'])) {
        startDraw();
    } elseif (isset($_POST['draw_number'])) {
        drawNumber();
    } elseif (isset($_POST['new_draw'])) {
        newDraw();
    } elseif (isset($_POST['new_session'])) {
        session_unset();
        session_destroy();
        header("Location: a3.php");
        exit();
    }
}

function generateTickets($quantity)
{
    for ($i = 0; $i < $quantity; $i++) {
        $numbers = range(1, 42);
        shuffle($numbers);
        $ticket_numbers = array_slice($numbers, 0, 5);
        sort($ticket_numbers);
        $_SESSION['tickets'][] = [
            'number' => str_pad($_SESSION['ticket_counter'], 7, '0', STR_PAD_LEFT),
            'numbers' => $ticket_numbers,
            'matched' => 0,
        ];
        $_SESSION['ticket_counter']++;
    }
}

function startDraw()
{
    $_SESSION['drawn_numbers'] = [];
    $_SESSION['current_draw'] = [
        'prize_pool' => calculatePrizePool(),
        'matches' => [
            2 => 0,
            3 => 0,
            4 => 0,
            5 => 0,
        ],
        'winnings' => [
            3 => 0,
            4 => 0,
            5 => 0,
        ],
    ];
}

function calculatePrizePool()
{
    $total_sales = count($_SESSION['tickets']) * 1.50;
    $prize_pool = $total_sales * 0.70;
    return $prize_pool;
}

function drawNumber()
{
    if (count($_SESSION['drawn_numbers']) >= 5) {
        return;
    }

    do {
        $number = rand(1, 42);
    } while (in_array($number, $_SESSION['drawn_numbers']));

    $_SESSION['drawn_numbers'][] = $number;
    sort($_SESSION['drawn_numbers']);
    updateMatches();

    if (count($_SESSION['drawn_numbers']) == 5) {
        calculateWinnings();
    }
}

function updateMatches()
{
    $drawn_numbers = $_SESSION['drawn_numbers'];
    // Reset matches
    $_SESSION['current_draw']['matches'] = [
        2 => 0,
        3 => 0,
        4 => 0,
        5 => 0,
    ];
    foreach ($_SESSION['tickets'] as $index => $ticket) {
        $matched_numbers = array_intersect($ticket['numbers'], $drawn_numbers);
        $matched_count = count($matched_numbers);
        $_SESSION['tickets'][$index]['matched'] = $matched_count;
        if ($matched_count >= 2) {
            $_SESSION['current_draw']['matches'][$matched_count]++;
        }
    }
}

function calculateWinnings()
{
    $prize_pool = $_SESSION['current_draw']['prize_pool'];
    $jackpot = $_SESSION['jackpot'];
    $prize_distribution = [
        3 => $prize_pool * 0.30,
        4 => $prize_pool * 0.30,
        5 => $prize_pool * 0.40,
    ];

    // Добавляем джекпот к призу за 5 совпадений
    $prize_distribution[5] += $jackpot;

    foreach ([3, 4, 5] as $match_count) {
        $winners = $_SESSION['current_draw']['matches'][$match_count];
        if ($winners > 0) {
            $_SESSION['current_draw']['winnings'][$match_count] =
                $prize_distribution[$match_count] / $winners;
        } else {
            if ($match_count == 5) {
                // Если нет победителей с 5 совпадениями, сумма переносится в джекпот
                $_SESSION['jackpot'] += $prize_distribution[5];
            }
        }
    }

    // Если есть победители с 5 совпадениями, джекпот обнуляется
    if ($_SESSION['current_draw']['matches'][5] > 0) {
        $_SESSION['jackpot'] = 0.00;
    }
}

function newDraw()
{
    $_SESSION['tickets'] = [];
    $_SESSION['drawn_numbers'] = [];
    $_SESSION['ticket_counter'] = 1;
    $_SESSION['draw_number']++;
    $_SESSION['current_draw'] = [];
}

function formatNumber($number)
{
    return number_format($number, 2, '.', ' ');
}

// HTML and CSS below
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Лотерея 5 из 42</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background: #1e1e1e;
            color: #ffffff;
            margin: 0;
            padding: 0;
        }
        header, footer {
            background: #111;
            text-align: center;
            padding: 20px;
        }
        h1, h2 {
            margin: 0;
            font-size: 36px;
        }
        main {
            padding: 20px;
        }
        .lottery-container {
            display: flex;
            flex-wrap: wrap;
            justify-content: space-around;
        }
        .ticket, .controls, .stats, .drawn-numbers {
            background: #222;
            border-radius: 10px;
            padding: 20px;
            margin: 10px;
            box-sizing: border-box;
        }
        .ticket {
            width: 200px;
            margin: 10px 5px;
        }
        .ticket-number {
            font-size: 18px;
            margin-bottom: 10px;
        }
        .ticket-numbers {
            display: flex;
            flex-wrap: wrap;
        }
        .number-ball {
            background: #444;
            border-radius: 50%;
            width: 40px;
            height: 40px;
            line-height: 40px;
            margin: 5px;
            text-align: center;
            font-size: 18px;
        }
        .drawn {
            background: #e74c3c;
        }
        .matched {
            background: #2ecc71;
        }
        .controls button {
            padding: 10px 20px;
            font-size: 16px;
            margin: 5px;
        }
        .controls input[type="number"] {
            padding: 5px;
            font-size: 16px;
            width: 80px;
        }
        .stats, .drawn-numbers {
            width: calc(50% - 40px);
            display: inline-block;
            vertical-align: top;
        }
        .stats table, .winners table {
            width: 100%;
            border-collapse: collapse;
        }
        .stats th, .stats td, .winners th, .winners td {
            border: 1px solid #555;
            padding: 10px;
            text-align: center;
        }
        .drawn-numbers .number-ball {
            width: 60px;
            height: 60px;
            line-height: 60px;
            font-size: 24px;
        }
        .info {
            margin-bottom: 20px;
        }
        .info p {
            font-size: 18px;
            margin: 5px 0;
        }
        .controls form {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
        }
        .controls label {
            margin-right: 10px;
        }
        .stats-container {
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
        }
        .stats {
            width: calc(50% - 20px);
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <header>
        <h1>Лотерея 5 из 42</h1>
    </header>
    <main>
        <div class="info">
            <p><strong>Тираж №:</strong> <?php echo $_SESSION['draw_number']; ?></p>
            <p><strong>Призовой фонд текущего тиража:</strong> <?php
                if (isset($_SESSION['current_draw']['prize_pool'])) {
                    echo formatNumber($_SESSION['current_draw']['prize_pool']) . ' грн';
                } else {
                    echo '0.00 грн';
                }
            ?></p>
            <p><strong>Джекпот:</strong> <?php
                echo formatNumber($_SESSION['jackpot']) . ' грн';
            ?></p>
            <p><strong>Количество билетов в тираже:</strong> <?php
                echo count($_SESSION['tickets']);
            ?></p>
        </div>

        <div class="stats-container">
            <div class="stats">
                <h2>Статистика</h2>
                <table>
                    <tr>
                        <th>Совпадения</th>
                        <th>Количество билетов</th>
                        <th>Выигрыш на билет (грн)</th>
                    </tr>
                    <?php foreach ([2, 3, 4, 5] as $match_count): ?>
                        <tr>
                            <td><?php echo $match_count; ?></td>
                            <td><?php
                                echo isset($_SESSION['current_draw']['matches'][$match_count])
                                    ? $_SESSION['current_draw']['matches'][$match_count]
                                    : 0;
                            ?></td>
                            <td><?php
                                if ($match_count >= 3 && count($_SESSION['drawn_numbers']) == 5) {
                                    echo isset($_SESSION['current_draw']['winnings'][$match_count])
                                        ? formatNumber($_SESSION['current_draw']['winnings'][$match_count])
                                        : '0.00';
                                } else {
                                    echo '-';
                                }
                            ?></td>
                        </tr>
                    <?php endforeach; ?>
                </table>
            </div>

            <?php if (!empty($_SESSION['drawn_numbers'])): ?>
                <div class="drawn-numbers">
                    <h2>Доставленные шары:</h2>
                    <div class="ticket-numbers">
                        <?php foreach ($_SESSION['drawn_numbers'] as $number): ?>
                            <div class="number-ball drawn"><?php echo $number; ?></div>
                        <?php endforeach; ?>
                    </div>
                </div>
            <?php endif; ?>
        </div>

        <div class="controls">
            <form method="post">
                <label for="quantity">Количество билетов:</label>
                <input type="number" name="quantity" id="quantity" value="1000" min="1">
                <button type="submit" name="generate_tickets">Купить билеты</button>
                <button type="submit" name="start_draw">Начать розыгрыш</button>
                <button type="submit" name="draw_number">Достать шар</button>
                <button type="submit" name="new_draw">Новый тираж</button>
                <button type="submit" name="new_session">Новая сессия</button>
            </form>
        </div>

        <div class="lottery-container">
            <?php
            $displayed_tickets = array_slice($_SESSION['tickets'], 0, 20);
            foreach ($displayed_tickets as $ticket):
            ?>
                <div class="ticket">
                    <div class="ticket-number">Билет № <?php echo $ticket['number']; ?></div>
                    <div class="ticket-numbers">
                        <?php foreach ($ticket['numbers'] as $number): ?>
                            <div class="number-ball <?php
                                if (in_array($number, $_SESSION['drawn_numbers'])) {
                                    echo 'matched';
                                }
                            ?>">
                                <?php echo $number; ?>
                            </div>
                        <?php endforeach; ?>
                    </div>
                    <div>
                        <p>Совпадения: <?php echo $ticket['matched']; ?></p>
                    </div>
                </div>
            <?php endforeach; ?>
        </div>

        <?php if (isset($_SESSION['current_draw']) && count($_SESSION['drawn_numbers']) == 5): ?>
            <div class="winners">
                <h2>Результаты розыгрыша</h2>
                <?php if ($_SESSION['current_draw']['matches'][5] > 0): ?>
                    <p>Выигравшие билеты с 5 совпадениями:</p>
                    <table>
                        <tr>
                            <th>Номер билета</th>
                            <th>Выигрыш (грн)</th>
                        </tr>
                        <?php
                        foreach ($_SESSION['tickets'] as $ticket) {
                            if ($ticket['matched'] == 5) {
                                echo "<tr><td>{$ticket['number']}</td><td>" . formatNumber($_SESSION['current_draw']['winnings'][5]) . "</td></tr>";
                            }
                        }
                        ?>
                    </table>
                <?php else: ?>
                    <p>Джекпот не разыгран. Сумма <?php echo formatNumber($prize_distribution[5]); ?> грн переносится на следующий тираж.</p>
                <?php endif; ?>
            </div>
        <?php endif; ?>
    </main>
    <footer>
        &copy; <?php echo date('Y'); ?> Лотерея 5 из 42
    </footer>
</body>
</html>