in reply to Zeckendorf representation
sub is_fibonnacci { my $plus = (5 * $_[0] * $_[0]) + 4; my $mins = (5 * $_[0] * $_[0])  4; return is_perfect_square($plus)  is_perfect_square($mins); }
No need to calculate 5 * $_[0] * $_[0] twice, and you probably meant to use the logical or operator instead of the bitwise or operator.
sub is_fibonnacci { my $plus = (5 * $_[0] * $_[0]) + 4; my $mins = $plus  8; return is_perfect_square($plus)  is_perfect_square($mins); }
(The logical operators shortcircuit so is_perfect_square($mins) will only execute if is_perfect_square($plus) is true.)
sub is_perfect_square { my $sqrt = int(sqrt($_[0])); return $sqrt * $sqrt == $_[0]; }
Or just:
sub is_perfect_square { int( $_[0] ** .5 ) ** 2 == $_[0] }


Replies are listed 'Best First'.  

Re^2: Zeckendorf representation
by thmsdrew (Scribe) on Aug 25, 2012 at 03:11 UTC  
by lidden (Curate) on Aug 25, 2012 at 03:59 UTC  
by thmsdrew (Scribe) on Aug 27, 2012 at 03:40 UTC 
In Section
Cool Uses for Perl