/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
primtal
Fra : Felix Nielsen


Dato : 18-02-04 05:42

Endnu en søvnløs nat med php.
jeg har lavet et lille script, som burde vise alle primtal fra 0
og opefter, det gør det også, men det viser også alle de ulige
tal der ikke er primtal.

<?
print ("2<br>");
$primtal = array (2);

for ($pp = 3; $pp <= 1000; $pp = $pp + 2) {

   for ($n = 0; $n < count($primtal); $n++) {
      
      if (($pp % $primtal[$n] != 0) AND (count($primtal) == $n + 1))
{

         $primtal[] = $pp;
         print ("$pp<br>\n");

      }

   }

}
?>
som det fremgår, har jeg startet med at definere en array, men
tallet 2 i, og derefter sørget for at kun de ulige tal bliver
undersøgt, hvis man ændrer tallet 2 i den første FOR sætning til
1, vil alle tal blive undersøgt, og pudsigt også listet, både på
skærm og i array.

$pp % $primtal[$n] != 0
Denne sætning skulle gerne betyde at $pp "potientielt primtal"
ikke er deleligt med et tal i arrayen og at den derfor skal
udføre handligen i if sætningen. Det gør den også, den gør det
bare hver gang.

(count($primtal) == $n + 1)
Denne linie skal sørge for at $pp bliver testet mod ale talene i
arrayen.

Det er disse to funktioner, om man vil, som tallet 9 fx. ikke
skulle kunne slippe igennem; men det gør det...

Jeg har tjekket det igennem igen og igen, og har ikke været i
stand til at finde nogen fejl. Jeg har også lavet den omvendt,
dvs. istedet for at kun primtal bliver lukket igennem, bliver kun
"ikki" primtal lukket igennem, det var dog uden størrer succes,
og dog kan man se en forskel, men det er vel og mærket en forskel
jeg ikke kan forklare.

<?
print ("2<br>");
$primtal = array (2);

for ($pp = 3; $pp <= 100; $pp = $pp + 1) {

   for ($n = 0; $n < count($primtal); $n++) {
      
      if ($pp % $primtal[$n] == 0) {
         $n = count($primtal);
      }
      else {
         $primtal[] = $pp;
         print ("$pp<br>\n");
      }

   }

}
?>

håber der er nogen der kan/vil hjælpe...

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Nezar Nielsen (18-02-2004)
Kommentar
Fra : Nezar Nielsen


Dato : 18-02-04 11:07

Felix Nielsen wrote:

>       if (($pp % $primtal[$n] != 0) AND (count($primtal) == $n + 1))
> {
>
>          $primtal[] = $pp;


Så snart du har fundet et tal i din liste af primtal, der ikke går rent
op i det potentielle primtal, så går du ud fra at det er et primtal -
det går selvfølgelig ikke, så den modificerede version:

<?php
$primtal = array (2);

for ($pp = 3; $pp <= 1000; $pp = $pp + 2) {

$er_et_primtal = true;
for ($n = 0; $n < count($primtal); $n++) {
//hvis et af primtallene går op, er det ikke et primtal.
   if (($pp % $primtal[$n] == 0)){
    $er_et_primtal = false;
   }
}
if($er_et_primtal){
   $primtal[] = $pp;
}

}

print "Primtal: \n";
print join("<br>\n", $primtal);
?>

Burde gøre det korrekt.

--
Mvh. Nezar Nielsen
http://fez.dk

Felix Nielsen (18-02-2004)
Kommentar
Fra : Felix Nielsen


Dato : 18-02-04 11:50

Det tog lidt tid før jeg kunne se hvad jeg havde gjort forkert, men ny
forstår jeg hvad jeg havde gjort forkert, men nu kører det, så mange tak
for svaret...

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408945
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste