倍数になる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";