17. december 2004 - 16:14
Der er
28 kommentarer og 1 løsning
tjek om et tal er et primtal
Jeg fandt følgende på php.net men det virker ikke. Er der en som kan fortælle hvorfor ? Fejltekst: Fatal error: Call to undefined function: gmp_prob_prime() Programkode: <?php // definitely not a prime echo gmp_prob_prime('6') . '\n'; // probably a prime echo gmp_prob_prime("1111111111111111111") . "\n"; // definitely a prime echo gmp_prob_prime("11") . "\n"; ?>
Annonceindlæg fra Infor
17. december 2004 - 16:17
#1
hov... echo gmp_prob_prime("6") . "\n"; sådan.. :o)
17. december 2004 - 16:22
#2
gmp er ikke kompileret ind i din php? Lav en phpinfo(), du leder efter: gmp gmp support enabled
17. december 2004 - 16:23
#3
øhh.. er ikke lige med ?
17. december 2004 - 16:32
#4
Er med på phpinfo() Men der står intet om gmp...
17. december 2004 - 16:35
#5
Så har du ikke adgang til gmp, så må du lave din egen test ;) Her er et eksempel: <?php function is_prime( $n ) { if ( $n < 1 ) { return false; } if ( $n == 2 ) { return true; } $maxtest = ceil( sqrt( $n ) ); for ( $i = 3; $i < $maxtest; $i++ ) { if ( $n % $i == 0 ) { return false; } } return true; } function t( $n ) { echo $n . " er " . ( is_prime( $n ) ? '' : 'ikke ' ) . "et primtal.<br>"; } t( 29 ); t( 42 ); ?>
17. december 2004 - 16:35
#6
if ( $n < 1 ) bør nok rettes til: if ( $n <= 1 )
17. december 2004 - 16:45
#7
Tak men... Dit eksempel fortæller at 10 er et primtal !!
17. december 2004 - 16:47
#8
jeg testede lige igen fra 1 til 10.. Allle tallene beregnes som primtal ??
17. december 2004 - 16:48
#9
Det er jo kun 1 2 3 5 7
17. december 2004 - 16:49
#10
Eeerh 2 sek ;)
17. december 2004 - 16:50
#11
1 er ikke et primtal
17. december 2004 - 16:50
#12
ok :o)
17. december 2004 - 16:50
#13
Joo... 1 kan divideres med 1 og sig selv da..
17. december 2004 - 16:51
#14
ikke fordi jeg gider blande mig så meget, men idet for at tælle løkke 1 op hver gang kan man tælle den 2 op.. og så skifte if ( $n == 2 ) { return true; } ud med if ($n % 2 == 0 ) { return ($n == 2); }
17. december 2004 - 16:52
#15
blueye97> indeed det kan det, men 1 er pr definition ikke et primtal...
17. december 2004 - 16:53
#16
Nåh ok... Jeg er ikke matematikgeni... :o))
17. december 2004 - 16:54
#17
I min løkke skal for ( $i = 3; $i < $maxtest; $i++ ) ændres til: for ( $i = 2; $i <= $maxtest; $i++ )
17. december 2004 - 16:56
#18
BOING !!! Det virker efter hensigten. Tak og værsgo'
17. december 2004 - 16:56
#19
nejnej.. det giver heller ikke mening... hvad laver du med din maxtest?
17. december 2004 - 16:58
#20
så vidt jeg kan se går det da galt, hvis man smider 8 derind.. Det er ikke mindre end 1 og ej heller er det lig 2.. maxtest bliver sat til 4 og så har vi at 3 % 4 == 0 så vi retunerer true
17. december 2004 - 16:59
#21
bromer, Ikke forstået? Jeg finder bare ud af hvor mange jeg er nødt til at teste, for at teste et tal n, er det kun nødvendigt at checke tallene op til sqrt(n)...
17. december 2004 - 17:00
#22
bromer, $n % $i - hvis $n er 8 vil den teste 8 % 2 == 0 og fejle allerede der ;)
17. december 2004 - 17:01
#23
ahh.. okay.. det virker fordi du ændrede din løkke.. Det så jeg ikke.. af ren performence bør funktionen ændres til: function is_prime($n) { if ($n % 2 == 0) { return ($n == 2); } $maxtest = ceil( sqrt( $n ) ); for ($i = 3; $i < $maxtest; $i += 2) { if ( $n % $i == 0 ) { return false; } } return true; }
17. december 2004 - 17:04
#24
bromer, ja det kunne man optimere med :) Funktionen vil så se således ud: function is_prime( $n ) { if ( $n < 1 ) { return false; } if ( $n % 2 == 0 ) { return true; } $maxtest = ceil( sqrt( $n ) ); for ( $i = 3; $i < $maxtest; $i += 2 ) { if ( $n % $i == 0 ) { return false; } } return true; } Det var faktisk den jeg burde have rettet først ;)
17. december 2004 - 17:10
#25
lol ja det var så også forkert kom jeg til at tænke på, den første test skal stadig være der: function is_prime( $n ) { if ( $n < 1 ) { return false; } if ( $n == 2 ) { return true; } if ( $n % 2 == 0 ) { return false; } $maxtest = ceil( sqrt( $n ) ); for ( $i = 3; $i < $maxtest; $i += 2 ) { if ( $n % $i == 0 ) { return false; } } return true; }
17. december 2004 - 17:25
#26
jaja.. så er det jo samme forslag.. der er ingen forskel på if ( $n == 2 ) { return true; } if ( $n % 2 == 0 ) { return false; } og if ($n % 2 == 0) { return ($n == 2); }
17. december 2004 - 17:26
#27
bromer, Det er mig der sover, det er da rigtigt ;)
18. december 2004 - 17:24
#28
blueeye - grunden til 1 ikke er et primtal er at for et tal kan være et primtal skal det have 2 divisorer, hverken færre eller flere, og da 1 kun har en divisor {1}, kan det ikke være et primtal.
18. december 2004 - 18:24
#29
Fra "Matematik 2AL - Algebra" af Anders Thorup fra Københavns Universitet: "Et naturligt tal p kaldes som bekendt et primtal hvis p > 1 og p kun har trivielle divisoerer (dvs hvis de enste posivitive divisorer i p er 1 og p)". det er helt rigtigt det suxor sagde, men det ville da ikke være rigtig Lørdag, hvis man ikke kunne citere en matematiker.
Vi tilbyder markedets bedste kurser inden for webudvikling