perl でバカ正直に書いたらこうなった。%seen で過去の登場分をメモって枝刈りしてみたけど、効果を発揮できてるんだかどうだか分からん。
use strict; my $found = 0; my %seen = (); for my $m (2 .. 7110) { for my $n (1 .. $m / 2) { if (find_7110($n, $m - $n)) { printf "found: %d, %d\n", $n, $m - $n; $found = 1; } } exit if $found; } print "not found."; exit; sub find_7110 { my ($n1, $n2, $x) = @_; while (($x = $n1 + $n2) < 7110) { my $k = "$n1 + $n2"; return 0 if exists $seen{$k}; # not found $seen{$k} = 1; $n1 = $n2; $n2 = $x; } return ($x == 7110); }