Anonymous user
Greatest common divisor: Difference between revisions
→{{header|Perl}}: Add modules, update timing
(Updated D entry) |
(→{{header|Perl}}: Add modules, update timing) |
||
Line 2,037:
return $u * $k;
}</lang>
All three modules will take large integers as input, e.g.
<tt>gcd("68095260063025322303723429387", "51306142182612010300800963053")</tt>. Other possibilities are Math::Cephes euclid, Math::GMPz gcd and gcd_ui.
<lang perl># Fastest, takes multiple inputs
use Math::Prime::Util "gcd";
$gcd = gcd(49865, 69811);
# In CORE. Slowest, takes multiple inputs, result is a Math::BigInt unless converted
# Result is a Math::Pari object unless converted
use Math::Pari "gcd";
$gcd = gcd(49865, 69811)->pari2iv
===Notes on performance===
<lang perl>use Benchmark qw(cmpthese);
use Math::BigInt;
use Math::Pari;
use Math::Prime::Util;
my $u = 40902;
my $v = 24140;
cmpthese(-5, {
'
'gcd_iter' => sub { gcd_iter($u, $v); },
'gcd_bin' => sub { gcd_bin($u, $v); },
'gcd_bigint' => sub { Math::BigInt::bgcd($u,$v)->numify(); },
'gcd_pari' => sub { Math::Pari::gcd($u,$v)->pari2iv(); },
'gcd_mpu' => sub { Math::Prime::Util::gcd($u,$v); },
});</lang>
Output on 'Intel
<pre>
Rate gcd_bigint gcd_bin
gcd_iter 793422/s 1887% 238% 29% -- -58% -89%
gcd_pari 1896544/s 4649% 708% 209% 139% -- -73%
gcd_mpu 7114798/s 17714% 2930% 1057% 797% 275% --
</pre>
▲===Built-in===
▲<lang perl>use Math::BigInt;
▲ Math::BigInt::bgcd(@_)->numify();
▲}</lang>
=={{header|Perl 6}}==
|