php-doc-en/reference/gmp/functions/gmp-gcdext.xml
Jesus M. Castagnetto 2721756eb4 Added some blurb on diophantine eqs to gmp_gcdext
Added blurb on object comparisons in PHP4
Known bug: make html does not copy the PNG from images to the correct dir
   Someone with more insight on what to change in configure.in and related
   can do the changes (don't want to break the build).


git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@121878 c90b9560-bf6c-de11-be94-00142212c4b1
2003-04-01 06:39:55 +00:00

82 lines
2.5 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.3 $ -->
<!-- splitted from ./en/functions/gmp.xml, last change in rev 1.1 -->
<refentry id="function.gmp-gcdext">
<refnamediv>
<refname>gmp_gcdext</refname>
<refpurpose>Calculate GCD and multipliers</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<methodsynopsis>
<type>array</type><methodname>gmp_gcdext</methodname>
<methodparam><type>resource</type><parameter>a</parameter></methodparam>
<methodparam><type>resource</type><parameter>b</parameter></methodparam>
</methodsynopsis>
<para>
Calculates g, s, and t, such that <literal>a*s + b*t = g =
gcd(a,b)</literal>, where gcd is the greatest common divisor. Returns
an array with respective elements g, s and t.
</para>
<para>
This function can be used to solve linear Diophantine equations in two
variables. These are equations that allow only integer solutions and have the form:
<informalequation>
<alt>a*x + b*y = c</alt>
<graphic fileref="images/diophantine-equation.png"/>
</informalequation>
For more information, go to the <ulink url="&url.diophantine-equation;">"Diophantine
Equation" page at MathWorld</ulink>
</para>
<para>
<example>
<title>Solving a linear Diophantine equation</title>
<programlisting role="php">
<![CDATA[
// Solve the equation a*s + b*t = g
// where a = 12, b = 21, g = gcd(12, 21) = 3
$a = gmp_init(12);
$b = gmp_init(21);
$g = gmp_gcd($a, $b);
$r = gmp_gcdext($a, $b);
$check_gcd = (gmp_strval($g) == gmp_strval($r['g']));
$eq_res = gmp_add(gmp_mul($a, $r['s']), gmp_mul($b, $r['t']));
$check_res = (gmp_strval($g) == gmp_strval($eq_res));
if ($check_gcd && $check_res) {
$fmt = "Solution: %d*%d + %d*%d = %d\n";
printf($fmt, gmp_strval($a), gmp_strval($r['s']), gmp_strval($b),
gmp_strval($r['t']), gmp_strval($r['g']));
} else {
echo "Error while solving the equation\n";
}
// output: Solution: 12*2 + 21*-1 = 3
]]>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->