2010-04-29

http://anond.hatelabo.jp/20100429192116

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);
}

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん