倍数になる13進数

30分プログラム、その151。倍数になる13進数

ここにある正の整数xがあります。xは2桁以上です。この数字の並びが13進法表記であるとみなすと、10進法表記であると見なした場合の倍数になります。この条件を満たす最も小さいxを求めるプログラムを書いてください。

例えばxが567の時、これを13進法表記と見なすと5 * 13 * 13 + 6 * 13 + 7 で 930 になります。930は567の倍数ではないので、567は条件を満たしません。 条件を満たす数を見つけ出すプログラムを書いてください。「条件を満たす数を出力するプログラム」ではありません。(print 567などは禁止ということ。)

いいかげん、どう書く?.orgの問題ばっかりやってるのもどうかと思えてきた。しかも投稿してないし。

使い方

$ perl 13.pl
Name "main::b" used only once: possible typo at 13.pl line 24.
Name "main::a" used only once: possible typo at 13.pl line 24.
1 2 3 4 5 6 7 8 9 1557 1560 1614

警告は気にしない!

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# 13.pl -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/10/08 20:57:51
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#

use strict;
use warnings;
use List::Util qw( reduce );

# n進数文字列として解釈する
sub base($$){
    my ($base,$n) = @_;
    my @n = split '',$n;
    reduce { $base * $a + $b } @n;
}

sub check($){
    my ($n) = @_;
    my $m = base(13,$n);

    $m % $n == 0;
}

my @a = grep { check $_ } 1..10_000;
print "@a\n";