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
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
Janvesely12:
Zkus přepsat ten pseudokód - http://www.algoritmy.net/article/44/Eukliduv-algoritmus.
Janvesely12
Profil
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;
Nějak mi to nefunguje.
abc
Profil
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
fandaa, Janvesely12:
Pseudokód nefunguje, protože je na řádku 11 proměnná $p, kterou nikdo nikde nedefinuje
fandaa
Profil
abc:
Stejně tak jako proměnná z, která není taktéž definována. Vím, opravil jsem se.
Janvesely12
Profil
Díky, teď už to jenom vložit do svého tajemného kódu. :D
abc
Profil
Janvesely12:
Nebo můžete zkusit použít PHP fci gmp_gcd() viz [#7]
Janvesely12
Profil
Je to určitě vše zájimávé. A někdy si to všechno projdu. :)

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: