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: 12 let
|
0