#!/usr/bin/perl use strict; use warnings; use Math::BigFloat; my ($max, $suspect) = (0,0); N: for (2..999) { my $n = Math::BigFloat->new(1); $n->bdiv($_, 4000); my ($str) = $n->bstr() =~ /(\d+)\1/; my ($best, $orig) = ('', $str); while (1) { my ($long_match) = $str =~ /(\d+)\1/; last if ! defined $long_match; next N if $long_match =~ /^(\d)\1+$/; # ensure we don't reduce too far my $len = length($long_match); my $mult = int(length($orig) / $len); last if substr($orig, 0, $len * $mult) !~ /^($long_match)+$/; $str = $best = $long_match; } my $len = length($best); ($max, $suspect) = ($len, $_) if $len > $max; } print "$max\t$suspect\n";