Priemgetal checker & Priemgetal lijster

Door Wouter De Schuyter, 16 jaar geleden, 12.283x bekeken

Met dit scriptje kan je gemakkelijk checken of een getal een priemgetal is of niet. Je kan er ook alle priemgetallen tussen een bepaald getal a en b mee laten oplijsten.

Online voorbeeld: http://paradox-productions.net/priemgetallen.php

Gesponsorde koppelingen

PHP script bestanden

  1. priemgetallen.php

 

Er zijn 20 reacties op 'Priemgetal checker en priemgetal lijster'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Pim -
Pim -
16 jaar geleden
 
En waarom zou je dit in php willen?
Wouter De Schuyter
Wouter De Schuyter
16 jaar geleden
 
0 +1 -0 -1
Lijkt mij een vrij nutteloze reactie, omdat je anders met je rekenmachine alle delers zelf handmatig moet af gaan?
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
Kan ook heel handig met je GR hoor ;). Maar iets als dit kan vele malen sneller in andere talen.
SilverWolf NL
SilverWolf NL
16 jaar geleden
 
0 +1 -0 -1
En je weet dat je bij het controlleren van priemgetallen niet alles hoeft af te gaan? Ik geloof dat tot de wortel van het getal ook al goed is, al zou je moeten zoeken welk getal het precies is en waarom...
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
Ja idd de wortel. Als je hoger gaat dan de wortel, heb je breuk al gehad, maar dan andersom.
Stel we kijken of 16 een priemgetal is.
Als je dan hoger dat vier gaat, neem acht, dan heb je de breuk al gehad:
16 / 8 = 2, maar 16 / 2 is al acht.
Verder kan je i = 2 checken en dan alleen i=3+2k (dus 3,5,7 etc)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function isPrime($n)
{

    $sqrt = sqrt($n);
    if ($n != 2 && is_int($n/2)) {
        return false;
    }

    for ($i = 3; $i <= $sqrt; $i += 2) {
        if (is_int($n/$i)) {
            return false;
        }
    }

    return true;
}

?>
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
Nog even het bewijs dat je tot de wortel mag gaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
n / a = b
a <= b, want anders proberen we dezelfde mogelijkheid 2x
a <= n / a
a^2 <= n
a <= sqrt(n)


EDIT: We hebben toch bump bescherming?
Victor Php
Victor Php
16 jaar geleden
 
0 +1 -0 -1
Nog niet in tuts en scripts dacht ik ;-)
Wel in forum..

-Edit-

Ik kan niet checken of 0 een priemgetal is xD
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
0 is niet deelbaar door 1, noch door zichzelf en dus geen priemgetal.
Wouter De Schuyter
Wouter De Schuyter
16 jaar geleden
 
0 +1 -0 -1
0 is wel deelbaar door 1
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
Ohja 0 is deelbaar door alles en daarom geen priemgetal.
Richard van Velzen
Richard van Velzen
16 jaar geleden
 
0 +1 -0 -1
0 behoort niet tot de natuurlijke getallen, dus kan ook nooit kandidaat zijn voor priem.
P Lekensteyn
P Lekensteyn
16 jaar geleden
 
0 +1 -0 -1
Er zijn efficiëntere algoritmen om te bepalen of een getal priem is of niet. Zie bijvoorbeeld http://stackoverflow.com/questions/1428786/best-way-to-find-a-prime-number $tableDesignCount is overbodig, je kunt de modulo (%) operator gebruiken: $i % $columns == 1. Hieraan voldoet: 1, 11, 21, enz.

Ik zou het script begrenzen, als je -1e99 als getal1 en 1e99 als getal2 invoert blijft ie wel erg lang bezig. Al 160MB gedownload in 3 minuten.
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
@Richard, wel hoor
Richard van Velzen
Richard van Velzen
16 jaar geleden
 
0 +1 -0 -1
Er zijn twee definities voor de set van natuurlijke getallen, de een begint op 0, de andere (doorgaans bedoelde) set begint bij 1. 0 erbij betrekken is eigenlijk belachelijk, gezien natuurlijke getallen bedoeld zijn om te tellen en ordenen. Met 0 kun je geen van beiden (oh kijk, er staan daar 0 eenden!) dus ga je doorgaans uit van de traditionele definitie: positieve integere getallen. {1, 2, 3, ...} dus.
Toby hinloopen
toby hinloopen
16 jaar geleden
 
0 +1 -0 -1
Kon dit niet in een functie ipv. verspreid tussen je HTML code?

Overigens, dit soort berekeningen gaan extreem traag met PHP's standaard interpreter. Ik zou het nog eerder in Javascript doen; Google's v8 Javascript compiler is ruim 10x zo snel met zulke berekeningen.

http://gamebuster.tweakblogs.net/blog/5226


16 jaar geleden
 
0 +1 -0 -1
Het getal 1 is geen priemgetal. ???
Wouter De Schuyter
Wouter De Schuyter
16 jaar geleden
 
0 +1 -0 -1
@ Dylan; neen, 1 is niet priem.
Kris Peeters
Kris Peeters
16 jaar geleden
 
0 +1 -0 -1
Een priemgetal is een geheel getal met 2 verschillende delers.

1 heeft slecht 1 deler.
Bij alle priemgetallen is dat 1 en het getal zelf.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jacco Brandt
Jacco Brandt
15 jaar geleden
 
0 +1 -0 -1
Hier is een PHP-versie van de zeef van eratosthenes.
Hij berekent alle priemgetallen tussen 2 en 500.000 in
0.38213801384 seconden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
    public function zeef()
    {

        
        // load values
        $max = 500000;
        $values = array();
        $values[0] = $values[1] = false;
        $time = microtime(true);
        
        // default true
        for ($i = 2; $i < $max; $i++)
            $values[$i] = true;
        
        // check values
        for ($i = 2; $i < $max; $i++) {
            
            if ($values[$i]) {
            
                for ($j = pow($i, 2); $j < $max; $j += $i) {
                    
                    $values[$j] = false;    
                    
                }
            
            }
            
        }

        
        // output
        echo 'Time: '.(microtime(true)-$time).' seconden.<br />\n';
        echo '<ol>\n';
        
        for ($i = 2; $i < $max; $i++) {
            
            if ($values[$i]) {
                
                echo '<li>'.$i.'</li>\n';
                
            }            
            
        }

        
        echo '</ol>';
        
    }

?>


Edit) Sorry voor de bump, dat zag ik later pas.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. priemgetallen.php

Labels

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.