#!/usr/bin/perl -slw use strict; use warnings 'all'; use POSIX 'ceil'; our $N //= 3; our $M //= 1e6; my $each = ceil($M / $N); my $last = 0; my @ranges = ( ); for( 1..$N ) { last unless $last <= $M; my $part = [ $last => $_ == $N ? $M : $last + ( $_ == $N ? $each : $each - 1 ) ]; $part->[1] = $M if $_ == $N; $last += $each; push @ranges, $part; }# end for() printf "%2d : from %7d to %7d (%7d)\n", $_, @{ $ranges[ $_ ] }, $ranges[ $_ ][ 1 ] - $ranges[ $_ ][ 0 ] + 1 for 0 .. $#ranges;