#! /usr/bin/perl -wl # sum of the numbers in series 1..n that are multiple of either 3 or 5 use List::Util qw(sum sum0); sub f1 { sum0 grep { $_ % 3 == 0 or $_ % 5 == 0 } 1 .. shift; } sub f2 { sum map { $_ * (map $_*($_+1)/2, int $_[0]/abs)[0] } (3, 5, -15); } # while (<>) {...} for (1 .. 23) { print join ' ', $_, f1($_), f2($_); } #### sub f3 { my $n = shift; my $t3 = 3 * int($n/3) * int($n/3 + 1) / 2; my $t5 = 5 * int($n/5) * int($n/5 + 1) / 2; my $t15 = 15 * int($n/15) * int($n/15 + 1) / 2; return $t3 + $t5 - $t15; }