| Autor | Zpráva | ||
|---|---|---|---|
| Janvesely12 Profil |
Zdravím, potřeboval bych udělat, abych když budu mít dvě čísla, aby mi to našlo největší společný násobek. Našel jsem Eukleidův algoritmus, ale nevím jak to mám udělat v php.
Zatím jsem udělal toto: while ($r == 0){
$r = $u % $v;
$u = $v;
$v = $r;
}Nevím jak do toho mám přiřadit hodnoty, např 130 a 50. Když nad tím vytvořím proměnnou $u a $v, tak mi vyjde 50 místo 10. Spočítá to jenom 1x místo toho, aby počítal do té doby dokud se nebude $r = 0. Děkuji |
||
| juriad Profil |
toto je algoritmus na největšího společného dělitele, (násobek je samozřejmě něco jako nekonečno :)
změň podmínku na $r!=0 a na začátek ji naplň nenulou, aby se podmínka provedla alespoň jednou
|
||
| Janvesely12 Profil |
Díky, má to být dělitel má chyba.
Vše funguje, bohužel se mi vypisují všechny čísla, nevíš jak by to šlo omezit na nejmenší? Už jsem na to přišel. EDIT: Já nechápu, jak mi to může najít číslo, které když to vydělím tak vyjde 60,25. Jak je to možné? EDIT2: Problém nastává až později. První 3 výpočty to spočítá správně a potom už s manuálním výpočtem nesouhlasí. Konečný výsledek je 384 místo 96. Zde kód: $m1 = 40704;
$m2 = 23136;
$m3 = 1;
while ($m3 != 0){
$m3 = $m1 % $m2;
$u2 = $m2;
$m2 = $m3;
}
echo $u2; |
||
| Janvesely12 Profil |
#4 · Zasláno: 15. 2. 2012, 20:05:03
Nejsem si jistý, jestli toto ještě někdo přečte. Tak přidávám další příspěvěk. Jde o můj problém viz můj druhý edit.
|
||
| fandaa Profil |
#5 · Zasláno: 15. 2. 2012, 20:14:46
Janvesely12:
Zkus přepsat ten pseudokód - http://www.algoritmy.net/article/44/Eukliduv-algoritmus. |
||
| Janvesely12 Profil |
#6 · Zasláno: 15. 2. 2012, 20:27:21 · Upravil/a: Moderátor (editace znemožněna) 16. 2. 2012, 12:38:42
Mám to takto správně:
$a = 10;
$b = 20;
if ($a >= $b){
$m = $a;
$n = $b;}
else{
$m = $b;
$n = $a;}
while (n != 0){
$m = $p*$n + $z;
$m = $n;
$n = $z;}
echo $m; |
||
| abc Profil |
#7 · Zasláno: 15. 2. 2012, 20:35:38
Janvesely12:
Zkoušel jste PHP fci gmp_gcd()? Odkaz |
||
| fandaa Profil |
Janvesely12:
Omlouvám se, ne ten pseudokód, ale Javovský. <?php
function gcd($a, $b) {
while ($b != 0) {
$tmp = $a;
$a = $b;
$b = $tmp % $b;
}
return $a;
}
echo gcd(40704, 23136); // vrací 96
// případně tedy pomocí knihovny GMP
$gcd = gmp_gcd("40704", "23136");
echo gmp_strval($gcd) . "\n"; |
||
| abc Profil |
#9 · Zasláno: 15. 2. 2012, 20:41:52
fandaa, Janvesely12:
Pseudokód nefunguje, protože je na řádku 11 proměnná $p, kterou nikdo nikde nedefinuje |
||
| fandaa Profil |
#10 · Zasláno: 15. 2. 2012, 20:45:06
abc:
Stejně tak jako proměnná z, která není taktéž definována. Vím, opravil jsem se. |
||
| Janvesely12 Profil |
#11 · Zasláno: 15. 2. 2012, 20:49:01
Díky, teď už to jenom vložit do svého tajemného kódu. :D
|
||
| abc Profil |
#12 · Zasláno: 15. 2. 2012, 20:53:34
Janvesely12:
Nebo můžete zkusit použít PHP fci gmp_gcd() viz [#7] |
||
| Janvesely12 Profil |
#13 · Zasláno: 15. 2. 2012, 21:15:38
Je to určitě vše zájimávé. A někdy si to všechno projdu. :)
|
||
|
Časová prodleva: 14 let
|
|||
0