dankogai #4797(2007/12/13 05:58 GMT) [ Perl ] Rating0/2=0.00
回答は二種類。単純減算と正規表現利用バージョン。ただし後者の方はfib(2000)とかは出来ません。
Greediest Cruftiest Dan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#!/usr/local/bin/perl use strict; use warnings; use bignum; use Memoize; no warnings 'recursion'; sub fib{ my $n = shift; return 1 if $n <= 2; fib($n-2)+fib($n-1); } memoize 'fib'; sub gcd{ my ($m, $n) = @_; return gcd($n, $m) if $m < $n; my $r = $m % $n; return $n unless $r; gcd($n, $r); } sub gcd_nodiv{ my ($m, $n) = @_; return gcd($n, $m) if $m < $n; $m -= $n while $m > $n; return $n unless $m; gcd($n, $m); } sub gcd_regexp{ my ($m, $n) = @_; return gcd($n, $m) if $m < $n; my $sm = 1 x $m; my $sn = 1 x $n; $sm =~ s/^$sn//g; return $n unless $sm; gcd($n, length $sm); } sub say { local $\="\n"; print @_ }; say gcd_regexp(fib(25), fib(24)); say gcd_nodiv(fib(1999),fib(2000));
Rating0/2=0.00-0+
[ reply ]
dankogai
#4797()
[
Perl
]
Rating0/2=0.00
回答は二種類。単純減算と正規表現利用バージョン。ただし後者の方はfib(2000)とかは出来ません。
Greediest Cruftiest Dan
Rating0/2=0.00-0+
[ reply ]