Autor Zpráva
korat
Profil *
Zdravím, potřeboval bych PHP skript, který dokáže vypsat všechny prvočíselné dvojice až po pevně zadané číslo do pole na webu.

Díky :)
Alphard
Profil
Nezakládejte duplicity. Už jsem se jednou ptal, jak velká ta hranice bude.
korat
Profil *
To ano, ale potřeboval bych přímo tento kód napsaný...
peta
Profil
Co jsi nasel googlem? Tys nehledal, jo?
Co jsi zkusil udelat sam? Tys nic nezkusil?
Zkusil jsi priklad z te wiki prepsat sam? Tys to nezkusil?

Symbolicky:
pole = ()
prochazej(i = 2 az n)
{
bool = false
prochazej(j = 0 az count(pole))
{
if (i % pole[j] == 0) {bool = true; break;} // celociselne deleni se vsemi prvky v poli, pokud je nula, je celociselne delitelny
}
if bool continue;
else pole[] = i
}
pole[] = 1; // jednicka je prvocislo a celociselne jsou jim delitelne vsechny
echo '<pre>';
print_r(pole);
Neumis napsat 2 cykly a jedno deleni? To jako vazne? Ten zpusob na wiki by byl rychlejsi, tam se naopak prochazi cele pole s cisly 2-n a vyrazuji se z nej cisla hned vsechna cisla, ktere jdou delit cisly, co uz jsi nasbiral.
SeparateSK
Profil
<?php
    function generuj($po){
        $i=2;
        $r=array(1);
        while($i<$po){
            $p=0;
            for($j=2;$j<$i;$j++){ //testuj delitelnost so vsetkymi cislami od 2 az po $i
                if($i%$j==0){ //ak je zvysok 0, tak pridaj 1 do $p
                    $p++;
                    break; //ak je p vacsie ako nula, resp cislo sa da delit, potom je uz tento cyklus zbytocny        
                }        
            }
            if($p==0) //ak je $p 0, tak pridaj to pola prvocisel
                $r[]=$i;
            $i++;
        }
        return $r;
    }
    $arr=generuj(500);
    foreach($arr as $n) //prejdi kazdy prvok v poli
        echo "$n <br/>";
    echo "Pocet: ".count($arr);
?>
korat
Profil *
A ještě jak dosáhnout toho, aby se vypsaly čísla vedle sebe po dvou? Díky moc :)
SeparateSK
Profil
Myslíš?
1,2,
3,5,
7,11 atď?
Proste zmeníš:
    foreach($arr as $n) //prejdi kazdy prvok v poli
        echo "$n <br/>";
na
    for($idx=0;$idx<count($arr);$idx++){
        echo "$arr[$idx],";
        $idx++;
        echo "$arr[$idx],<br />";
    }
korat
Profil *
Díky mnohokrát! :)


ještě se chci zeptat, šlo by přidat úplně na začátek pole, kam se bude dát napsat ono číslo , vedle toho tlačítko Pocitej a vypíše do zadaného čísla do pole? Poslední dotaz, díky moc :)
peta
Profil
Ano, slo.
Joker
Profil
SeparateSK:
Jedna poznámka, výpisy typu echo "$arr[$idx],"; pro začátečníky nejsou ideální, lepší by bylo použít spojování řetězců a proměnné dát mimo uvozovky.
Takhle mají začátečníci pak problém chápat, co vlastně patří a nepatří do uvozovek.

korat:
šlo by přidat úplně na začátek pole, kam se bude dát napsat ono číslo , vedle toho tlačítko Pocitej a vypíše do zadaného čísla do pole?
Ano, šlo. Dá se tam formulář se dvěma prvky <input> (vstupní pole a odesílací tlačítko) a v PHP se to pak načte z $_GET nebo $_POST (podle toho, jestli jako metodu formuláře dáte get nebo post) a pak se to použije jako argument funkce generuj().
SeparateSK
Profil
Teda tak ako hovoril Joker:
<form>
 <input type="text" name="po" placeholder="100" />
 <input type="submit" name="submit" value="Pocitaj" />
</form>
<?php
    function generuj($po){
        $i=2;
        $r=array(1);
        while($i<$po){
            $p=0;
            for($j=2;$j<$i;$j++){ //testuj delitelnost so vsetkymi cislami od 2 az po $i
                if($i%$j==0){ //ak je zvysok 0, tak pridaj 1 do $p
                    $p++;
                    break; //ak je p vacsie ako nula, resp cislo sa da delit, potom je uz tento cyklus zbytocny        
                }        
            }
            if($p==0) //ak je $p 0, tak pridaj do pola prvocisel
                $r[]=$i;
            $i++;
        }
        return $r;
    }
    if($_GET["po"]=="")
        $_GET["po"]=100;
    if($_GET["submit"]&&is_numeric($_GET["po"])){
        $arr=generuj($_GET["po"]);
        for($idx=0;$idx<count($arr);$idx++){
            echo $arr[$idx].",";
            $idx++;
            echo $arr[$idx].",<br />";
        }
        echo "Počet: ".count($arr);
    }
?>
Inak v PHP môžeš vpísať premennú do dvojitých uvodzoviek a ono ju to dosadí do reťazca viz. http://php.net/manual/en/language.types.string.php#language.types.string.parsing.simple

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: