Ik wil graag weten of 35184372088832 een priemgetal is :) Hoe kom ik daar achter? Zonder getalletjes te tellen, het zijn er 14 :) Dus het is 15 komma 18 triljoen (15.18 E 12).
En dat zijn nog maar 14 getalletjes. Hoe kom ik er achter als het er 70 zijn? Zijn er iets van priemgetal-achterhaal-logarithmen?? :)
Formules die het iets makkelijker maken? Al is het maar een factor 10 minder proberen, scheelt toch weer.
En nee, ik ga geen loop bouwen die N gaat delen door elk getal groter dan 1, kleiner dan N. Dan moet ik 35.18 triljoen loops bouwen, dacht t niet!
Ja heel fijn voor ze, maar dat was niet de vraag. Ik hoef geen priemgetal te controleren van 9 miljoen cijfers. Er zijn trouwens formules die priemgetallen berekenen, dus een kunst is het niet meer. Ik wil dan ook geen priemgetal berekenen, maar nagaan of een gegeven getal een priemgetal is.
Vroeg me af of iemand er een truc voor kende. Zo niet, pech.
$nummer = 3;
var_dump(isPriem($nummer));
?>
Dit is de meest basale manier om te checken of een getal een priemgetal is. Echter ik zou deze functie in deze vorm niet voor hele grote getallen gebruiken aangezien dat de snelheid van je script niet ten goede komt.
Je kunt het natuurlijk wel verder aanpassen, zo kun je de for-loop al laten lopen tot de helft van het te onderzoeken getal. Aangezien een getal gedeeld door een waarde groter dan zijn eigen helft, nooit een heel getal op zal leveren...
Aanvulling:
Je moet er sowiezo op letten dat je getal niet even is. Alle even getallen zijn deelbaar door 2. (laatste getal in je cijfer, mag niet even zijn)
Verder kan je hier ook rekening mee houden:
1,2,3,5,7,11,13,17
Zoals je ziet zijn dit priemgetallen, in principe hoef je alleen daarop te controleren. (in deze korte voorbeeldreeks zou je denken dat je de 9 en 15 mist, maar die zijn omdat die ook weer deelbaar zijn door 3.
Als het gaat om supergrote getallen zou ik het niet bruteforce uitrekenen. Er zijn vast arrays te vinden op internet met grote priemgetallen. Die kun je dan eenvoudig checken.
Robert, ik snap wel wat een priemgetal is :) Maar toch bedankt voor de uitleg. De getallen t/m 100 kan ik nog wel uit mn hoofd, maar het gaat om getallen van 70 cijfers.
Jan, dat zijn toch nog behoorlijke arrays... Maar is misschien wel een idee.
Zo bruteforce als het stukje van Blanche is natuurlijk geen optie, maar er schijnen wel algorithmen voor te zijn, en formules. Misschien dat iemand zich er ooit al voor had geinteresseerd.
Denk dat de arrays van Jan het beste zijn voor getallen van 70 cijfers :)
Robert, ik snap wel wat een priemgetal is :) Maar toch bedankt voor de uitleg. De getallen t/m 100 kan ik nog wel uit mn hoofd, maar het gaat om getallen van 70 cijfers.
Jan, dat zijn toch nog behoorlijke arrays... Maar is misschien wel een idee.
Zo bruteforce als het stukje van Blanche is natuurlijk geen optie, maar er schijnen wel algorithmen voor te zijn, en formules. Misschien dat iemand zich er ooit al voor had geinteresseerd.
Denk dat de arrays van Jan het beste zijn voor getallen van 70 cijfers :)
Dank allen
Ik bedoelde te zeggen dat je boven de 2 alleen maar op priemgetallen hoeft te controleren, of getallen waarvan je wilt weten of het een priemgetal is.
Die getallen die in de reeks missen, zijn al deelbaar door 1 van de eerdergenoemde getallen en hoef je niet te checken. Het was een aanvulling, waarmee je grotere getallen sneller kan controleren, omdat je niet voor elke $i in de for loop gaat controleren of het getal daardoor deelbaar is. Zo sla je namelijk een heleboel (onnodige) checks over.