use Math::Combinatorics; use strict; my @n = qw(0 1 2 3 4 5 6 7 8 9); my $combinat = Math::Combinatorics->new(count => 2, data => [@n], ); my %found = (); my $permutnum = 0; my $sum = 0; my $stopnext = 0; while(my @permu = $combinat->next_permutation){ my $bigpermut = join('', @permu); if ($bigpermut !~ /^0/ && substrDiv("$bigpermut")) { $found{"$bigpermut"} = 1; $sum += $bigpermut; if ($permutnum % 100000 == 0) { print "At $permutnum: $bigpermut - $sum\n"; $sum = 0; } } last if ($bigpermut == 123456789 && $stopnext); $stopnext = 1; $permutnum++; } print "sum: $sum\n"; exit; sub substrDiv { my $n = shift; my $ok = 1; my @primes = (2, 3, 5, 7, 11, 13, 17); my $ok = 1; my $i = 1; foreach my $p (@primes) { my $s = int(substr($n,$i,3)); if ($s % $p != 0) { $ok = 0; last; } $i++; } return $ok; }