het is opzich ook niet wereldschokkend, maar toch leuk.
maargoed welterusten. andere gegadigden kunnen zich melden (bij balie 4)
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);
?>
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).Nu duurt het op mijn laptop ongeveer 40s voor n=5000
Ik heb al een kleine optimalisatie gedaan ondertussen: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).
Code: Selecteer alles
/*
* Gemaakt met SharpDevelop.
* Gebruiker: Jan Willem
* Datum: 7-8-2010
* Tijd: 8:07
*
* Dit sjabloon wijzigen: Extra | Opties |Coderen | Standaard kop bewerken.
*/
using System;
namespace Prime1
{
class Program
{
public static void Main(string[] args)
{
long[] aiPrimes = {1, 2, 3};
long iLastPrime = 3;
long iCount = 1;
long iPrimer = 1;
while(++iCount < (long) Math.Pow(2, 32)){
while(iLastPrime < (2 * iCount)){
double fSqrt = Math.Sqrt(24 * iPrimer++ + 1);
if(Math.IEEERemainder(fSqrt, 1) != 0) continue;
long iCandidatePrime = (long) fSqrt;
if(Math.Abs((sbyte) (iCandidatePrime % 6) - 3) != 2) continue;
if(Math.Abs((sbyte) (iCandidatePrime & 3) - 2) != 1) continue;
long iSqrt = (long) Math.Floor(Math.Sqrt(iCandidatePrime));
long iIndex = 1;
bool bDividable = false;
while(!bDividable && (aiPrimes[iIndex] <= iSqrt)){
if((iCandidatePrime % aiPrimes[iIndex++]) == 0) bDividable = true;
}
if(!bDividable){
iLastPrime = iCandidatePrime;
Array.Resize<long>(ref aiPrimes, aiPrimes.Length + 1);
aiPrimes[aiPrimes.Length - 1] = iLastPrime;
}
}
bool bNotFound = true;
long iPos = (long) aiPrimes.Length;
while(aiPrimes[--iPos] >= iCount){
long iRemainer = (-aiPrimes[iPos] + (2 * iCount));
for(long iSIndex = 0; (bNotFound && (aiPrimes[iSIndex] <= iRemainer)); iSIndex++){
if(aiPrimes[iSIndex] == iRemainer){
Console.WriteLine(iCount.ToString() + ": " + iRemainer.ToString() + " + " + aiPrimes[iPos].ToString());
bNotFound = false;
}
}
}
if(bNotFound){
Console.WriteLine("Geldt niet voor " + iCount.ToString());
break;
}
}
}
}
}
Neen omdat Goldbach enkel over even gehele getallen spreekt.JVV schreef:Is dit niet hetzelfde als het Goldbach vermoeden? Maar dan anders geformuleerd.
Het vermoeden zegt dat elke even geheel getal groter dan 2 geschreven kan worden als een som van 2 priemgetallen.
Laten we een willekeurig even geheel getal N noemen (groter dan 2). Deze kan geschreven worden als de som van priemgetallen a en b. Daaruit volgt meteen dat;
N/2 precies tussen a en b in ligt.
Dat is nu juist het fraaie van wiskunde: de meeste stellingen die waar zijn, kun je gewoon bewijzen, en de meeste stellingen die onwaar zijn kun je falsificeren. Dus geloof is helemaal niet nodig!Ja. Voor mij wel. Maar vermoedelijk geen bewijs wat jullie zullen accepteren. Ik 'geloof' namelijk in een theorie die nogal afwijkt van de geaccepteerde theorieen. en beide onderbouwen elkander, ze passen precies in elkaar. dat is voor mij wel genoeg.
En als je die even getallen door 2 deelt, zoals JVV doet, kom je in de helft van de gevallen uit op een oneven getal.Neen omdat Goldbach enkel over even gehele getallen spreekt.
Andersom gesteld: Als je die getallen vermenigvuldigt met 2 kom je altijd op een even getal uit, waar het vermoeden van Goldbach voor geldt.Onwetend zijn vermoeden is geldig voor alle gehele getallen > 1
Jawelmcs51mc schreef:Neen omdat Goldbach enkel over even gehele getallen spreekt.
Onwetend zijn vermoeden is geldig voor alle gehele getallen > 1
Neem even 15, Goldbach zegt niets over 15 daar het oneven is
dan is 15 - 2 = 13 = priemgetal
en is 15 + 2 = 17 = priemgetal
Wat is het verschil?Laat ik nog wel even de kanttekening maken dat het niet om priemgetallen gaat, maar om niet-deelbare getallen.
Klopt!En dat vermoeden is nog niet bewezen?
Het verschil is het getal 1, dat doorgaans niet als priemgetal wordt gezien. Priemgetallen zouden alleen deelbaarzijn door 1 en door zichzelf, wat m.i. niet echt een goed argument is, maar desalniettemin wel de doorgaande wetenschappelijke opvatting.Wat is het verschil?
ik zal een poging wagen binnenkort. Als iemand me nou even een goed voorbeeldje kan laten zien van het bewijs van een soortgelijke stelling, dan kan ik het brengen zoals verlangd wordt.Dus Onwetend, we zijn erg nieuwsgierig naar je bewijs!
Zie bijvoorbeeld dit bewijs (van Euclides) voor het feit dat er oneindig veel priemgetallen zijn:ik zal een poging wagen binnenkort. Als iemand me nou even een goed voorbeeldje kan laten zien van het bewijs van een soortgelijke stelling, dan kan ik het brengen zoals verlangd wordt.
Ik vrees dat je voor het bewijzen van het vermoeden van Goldbach wel ingewikkeldere "instrumenten" nodig hebt.Beschouw een eindige verzameling van priemgetallen. Vermenigvuldig al deze priemgetallen met elkaar en tel 1 bij dit resultaat op (zie Euclides-getal). Het resulterende getal is nu niet deelbaar door een van de priemgetallen uit de eindige verzameling, waarmee wij begonnen zijn, dit omdat delen door een van deze priemgetallen altijd een rest van 1 geeft. Omdat alle niet-priemgetallen te schrijven zijn als een product van priemgetallen, is ofwel dit resulterende getal zelf een priemgetal ofwel moet er een priemgetal zijn, waardoor het resulterende getal deelbaar is, maar dat niet zit in de oorspronkelijke eindige verzameling van priemgetallen waarmee wij begonnen zijn. Hoe dan ook, is er dus tenminste nog een priemgetal, dat geen deel uitmaakte van de eindige verzameling, waarmee wij begonnen zijn. Dit argument is van toepassing ongeacht de eindige verzameling, waarmee wij deze redenering beginnen. Er bestaan dus altijd meer priemgetallen dan enig gegeven eindig getal.
JWvdVeer schreef:Joh, laten we er gewoon allen eerst een goede nacht over slapen .
Wellicht dat morgen die stelling er dan gewoon opeens uitrolt