Autor | Zpráva | ||
---|---|---|---|
Holicz Profil |
#1 · Zasláno: 9. 2. 2012, 20:15:48
Zdravím. Udělal jsem si script, který k zadanému číslu zjistí všechny jeho dělitele (čísla, kterým se dá dělit). Script prohledává jen prvočísla, protože i "normální" čísla by byla zbytečnost. Když jsem tento script dodělal napadlo mě, že si udělám i script pro nejmenší společného dělitele. Ten už mám, ale narazil jsem. Pokud zadám např. čísla 143 a 20, tak ty nemají žádného společného dělitele. Respektive mají jednoho 143*20. Já ověřuji jen prvočísla do 937. Když tedy zadám čísla 143 a 20 scriptu vyprší 20 sekund a neprovede se. Lze ještě před tímto limitem nějak do kódu dát, že pokud společného dělitele nemají vypíše se, že mají pouze dělitele ČÍSLO*ČÍSLO?
Kód na nejmenšího společného dělitele: <?php $prvocisla=array(); // Výčet prvočísel jsem smazal, aby byl kód přehlednější function isOutputInt ($cislo_1,$cislo_2) { if ($cislo_1 == 0 || $cislo_2 == 0) return 0; return ((intval ($cislo_1/$cislo_2) == ($cislo_1/$cislo_2)) ? 1 : 0); // funkce zjišťuje, zda je číslo celé (nemá desetinná místa) } if(isset($_POST['zjisti'])){ $cislo = $_POST['cislo']; $cislo2 = $_POST['cislo2']; $cislop = "0"; echo "<br><br>Zadal jsi čísla <b>$cislo</b> a <b>$cislo2</b> jejich nejmenší dělitel je: <br>"; while($cislop != ""){ if (isOutputInt($cislo,$prvocisla[$cislop]) == "1") { if (isOutputInt($cislo2,$prvocisla[$cislop]) == "1") { echo $prvocisla[$cislop]; echo "<br>"; die(); }} $cislop++; if ($cislop == $cislop2) { die(); }}} ?> Živá ukázka: Nejmenší společný dělitel Zjištění dělitele |
||
Alphard Profil |
Holicz:
„Lze ještě před tímto limitem nějak do kódu dát, že pokud společného dělitele nemají vypíše se, že mají pouze dělitele ČÍSLO*ČÍSLO?“ $end = time()+15; // 15 je limit while (true) { sleep(1); // neco delej if ($end < time()) break; } Jinak Eukleidův algoritmus. A ta "normální čísla" jsou složená čísla. |
||
Holicz Profil |
#3 · Zasláno: 9. 2. 2012, 22:49:40
Děkuji, už to funguje jak má. Za poučky o složených číslech taktéž děkuji.
|
||
Časová prodleva: 12 let
|
0