數學:根據「質數序列總和(2+3+5+7+11+ ...)第一個找到的「質數尾數」

數學:根據「質數序列總和(2+3+5+7+11+ ...)第一個找到的「質數尾數」

Post by tt »

尾數位數,質數總和(Prime Sum),尾數(為質數)
2,17,17
3,197,197
4,7699,7699
5,22039,22039
6,102001,102001
7,1005551,1005551
8,10180459,10180459
9,101361899,101361899
10,1000471291,1000471291
11,10012483391,10012483391
12,100000983157,100000983157
13,1000000541933,1000000541933
14,79000000627721,79000000627721
15,105000000696629,105000000696629
16,3675000000716753,3675000000716753
17,55125000000721487,55125000000721487
18,1929375000000746483,929375000000746483
19,55951875000000760183,5951875000000760183
20,2853545625000000820133,53545625000000820133
21,253965560625000001027497,965560625000001027497
22,66285011323125000002913359,5011323125000002913359
23,7225066234220625000003210941,66234220625000003210941
24,65025596107985625000003213893,596107985625000003213893
25,715281557187841875000003216523,1557187841875000003216523
26,6437534014690576875000003219161,34014690576875000003219161
27,1306819404982187105625000004681661,404982187105625000004681661
28,50965956794305297119375000004733119,6794305297119375000004733119
29,764489351914579456790625000004738791,51914579456790625000004738791
30,64981594912739253827203125000005012523,912739253827203125000005012523

Code: Select all

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>質數累積和計算器</title>
    <style>
        body {
            font-family: 'Courier New', monospace;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f5f5f5;
        }
        .container {
            background: white;
            padding: 30px;
            border-radius: 10px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            text-align: center;
        }
        .controls {
            margin: 20px 0;
            text-align: center;
        }
        button {
            background: #007bff;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 5px;
            cursor: pointer;
            margin: 5px;
            font-size: 16px;
        }
        button:hover {
            background: #0056b3;
        }
        button:disabled {
            background: #ccc;
            cursor: not-allowed;
        }
        .results {
            margin-top: 20px;
        }
        .progress {
            background: #e9ecef;
            border-radius: 5px;
            padding: 10px;
            margin: 10px 0;
        }
        .target {
            background: #d4edda;
            border: 2px solid #c3e6cb;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
        }
        .sum-display {
            font-family: 'Courier New', monospace;
            background: #f8f9fa;
            padding: 10px;
            border-radius: 3px;
            word-break: break-all;
            font-size: 14px;
        }
        .error {
            color: #dc3545;
            background: #f8d7da;
            padding: 10px;
            border-radius: 5px;
            margin: 10px 0;
        }
        .match {
            background: #d1ecf1;
            border: 2px solid #bee5eb;
            padding: 15px;
            border-radius: 5px;
            margin: 15px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>質數累積和計算器</h1>
        
        <div class="target">
            <h3>目標數字(待驗證):</h3>
            <div class="sum-display" id="targetNumber">64981594912739253827203125000005012523</div>
            <p>位數: <span id="targetDigits">38</span></p>
        </div>

        <div class="controls">
            <button onclick="startCalculation()">開始計算質數累積和</button>
            <button onclick="stopCalculation()" id="stopBtn" disabled>停止</button>
            <button onclick="resetCalculation()">重置</button>
        </div>

        <div class="results">
            <div class="progress" id="progress" style="display:none;">
                <strong>計算進度:</strong><br>
                質數個數: <span id="primeCount">0</span><br>
                當前質數: <span id="currentPrime">-</span><br>
                累積和: <span id="currentSum" class="sum-display">0</span><br>
                位數: <span id="currentDigits">1</span>
            </div>
            
            <div id="result" style="display:none;"></div>
        </div>
    </div>

    <script>
        const targetNumber = "64981594912739253827203125000005012523";
        let isCalculating = false;
        let primeCount = 0;
        let currentSum = 0n;
        let currentPrime = 2;

        // 更新目標數字位數顯示
        document.getElementById('targetDigits').textContent = targetNumber.length;

        function isPrime(n) {
            if (n < 2) return false;
            if (n === 2) return true;
            if (n % 2 === 0) return false;
            
            for (let i = 3; i * i <= n; i += 2) {
                if (n % i === 0) return false;
            }
            return true;
        }

        function getNextPrime(n) {
            n++;
            while (!isPrime(n)) {
                n++;
            }
            return n;
        }

        function startCalculation() {
            if (isCalculating) return;
            
            isCalculating = true;
            document.querySelector('button').disabled = true;
            document.getElementById('stopBtn').disabled = false;
            document.getElementById('progress').style.display = 'block';
            document.getElementById('result').style.display = 'none';
            
            // 重置或繼續計算
            if (primeCount === 0) {
                primeCount = 0;
                currentSum = 0n;
                currentPrime = 2;
            }
            
            calculateStep();
        }

        function calculateStep() {
            if (!isCalculating) return;
            
            const startTime = Date.now();
            
            // 每次處理多個質數以提高效率
            for (let i = 0; i < 1000 && isCalculating; i++) {
                if (primeCount === 0) {
                    currentPrime = 2;
                } else {
                    currentPrime = getNextPrime(currentPrime);
                }
                
                currentSum += BigInt(currentPrime);
                primeCount++;
                
                // 檢查是否達到目標
                const currentSumStr = currentSum.toString();
                
                // 更新顯示
                if (i % 100 === 0 || currentSumStr.length >= 30) {
                    document.getElementById('primeCount').textContent = primeCount.toLocaleString();
                    document.getElementById('currentPrime').textContent = currentPrime.toLocaleString();
                    document.getElementById('currentSum').textContent = currentSumStr;
                    document.getElementById('currentDigits').textContent = currentSumStr.length;
                }
                
                // 檢查是否找到匹配
                if (currentSumStr === targetNumber) {
                    foundMatch();
                    return;
                }
                
                // 如果超過目標位數太多,可能需要停止
                if (currentSumStr.length > targetNumber.length + 5) {
                    noMatch();
                    return;
                }
                
                // 每30位數時報告
                if (currentSumStr.length === 30 && i === 0) {
                    reportMilestone(30, currentSumStr, primeCount);
                }
            }
            
            // 繼續下一批計算
            setTimeout(calculateStep, 10);
        }

        function foundMatch() {
            isCalculating = false;
            document.querySelector('button').disabled = false;
            document.getElementById('stopBtn').disabled = true;
            
            document.getElementById('result').innerHTML = `
                <div class="match">
                    <h3>✅ 找到匹配!</h3>
                    <p><strong>第 ${primeCount.toLocaleString()} 個質數的累積和確實等於目標數字</strong></p>
                    <p>最後一個質數: ${currentPrime.toLocaleString()}</p>
                    <p>累積和: ${currentSum.toString()}</p>
                    <p>ChatGPT 的計算是正確的!</p>
                </div>
            `;
            document.getElementById('result').style.display = 'block';
        }

        function noMatch() {
            isCalculating = false;
            document.querySelector('button').disabled = false;
            document.getElementById('stopBtn').disabled = true;
            
            document.getElementById('result').innerHTML = `
                <div class="error">
                    <h3>❌ 沒有找到匹配</h3>
                    <p>計算已超過目標數字位數,但沒有找到完全匹配的累積和</p>
                    <p>這表明 ChatGPT 的計算可能有誤</p>
                    <p>當前累積和: ${currentSum.toString()}</p>
                    <p>位數: ${currentSum.toString().length}</p>
                </div>
            `;
            document.getElementById('result').style.display = 'block';
        }

        function reportMilestone(digits, sum, count) {
            console.log(`第一個${digits}位數的質數累積和: ${sum}`);
            console.log(`需要前 ${count} 個質數`);
        }

        function stopCalculation() {
            isCalculating = false;
            document.querySelector('button').disabled = false;
            document.getElementById('stopBtn').disabled = true;
        }

        function resetCalculation() {
            stopCalculation();
            primeCount = 0;
            currentSum = 0n;
            currentPrime = 2;
            document.getElementById('progress').style.display = 'none';
            document.getElementById('result').style.display = 'none';
        }
    </script>
</body>
</html>