use feature 'say'; use List::Util qw( product reduce ); sub f4 { my $n = shift; return reduce { my $x = int( $n / abs($b) ); $a + $b * $x * ($x + 1) / 2; } 0, @_, -product @_; } say f4( 10, 3, 5 ); say f4( 100, 3, 5 ); say f4( 1000, 3, 5 );