Zelf heb ik ook nog maar een stuk code geschreven, deze laat ik vannacht maar even het werk doen:
Code: Selecteer alles
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
set_time_limit(3600);
setlocale(LC_TIME, 'Europe/Paris', 'nld');
date_default_timezone_set('Europe/Amsterdam');
$aiPrimes = Array(1, 2, 3);
$iLastPrime = 3;
$iCount = 2;
$iPrimer = 1;
while(true){
var_dump($iCount) & flush();
while($iLastPrime < (2 * $iCount)){
$fSqrt = sqrt(24 * $iPrimer++ + 1); # Voor ieder priemgetal p > 3, bestaat er een natuurlijk getal n zodat p² = 24n + 1.
if(fmod($fSqrt, 1)) continue;
$iCandidatePrime = intval($fSqrt);
if(abs(($iCandidatePrime % 6) - 3) != 2) continue; # Voor ieder priemgetal p > 3, bestaat er een natuurlijk getal n zodat p = 6n ± 1.
if(abs(($iCandidatePrime & 3) - 2) != 1) continue; # Voor ieder priemgetal p > 2, bestaat er een natuurlijk getal n zodat p = 4n ± 1.
$iSqrt = floor(sqrt($iCandidatePrime));
$iIndex = 1;
while($aiPrimes[$iIndex] <= $iSqrt) if(!($iCandidatePrime % $aiPrimes[$iIndex++])) continue 2;
$aiPrimes[] = ($iLastPrime = $iCandidatePrime);
}
$iIndex = count($aiPrimes);
while($aiPrimes[--$iIndex] >= $iCount){
if(in_array((-$aiPrimes[$iIndex] + (2 * $iCount)), $aiPrimes)){
++$iCount;
continue 2;
}
}
var_dump('Geldt niet voor '.$iCount);
break;
}
print_r($aiPrimes);
?>
Dan zie ik morgen wel wat er uit komt
.
Gezien de snelheid waarmee het programma draait, vermoed ik dat er vaak per getal meerdere paren zijn. Zoals bijv. het getal 7 de paren (3,11) en (1, 13) heeft. Vandaar dat ik ook steeds sterker begin te vermoeden dat het bewijs ook vrij simplistisch moet zijn (al heb ik er zelf niet over nagedacht)
Het geldt in ieder geval op dit moment tot en met de 25,000. Dus we gaan het zien.
Nu duurt het op mijn laptop ongeveer 40s voor n=5000
In PHP heb ik hem al binnen de 10s zitten. Maar jij hebt er dan ook twee ongelooflijke for-loops inzitten. Mijn code overschrijven naar een andere taal zou waarschijnlijk ook nog veel schelen (is dat ik er op dit tijdstip geen tijd, laat staan zin, meer voor heb).