ダブル完全数(3倍完全数)

30分プログラム、その146。 ダブル完全数

ここで「自分以外の約数の和が自分自身の2倍と等しいような整数」を「ダブル完全数」と呼ぶことにします。10000以下のダブル完全数をすべて求めるコードを書いてください。

Perlの文法を忘れてそうだったので、Perlで。

使い方

$ perl perfect.pl
120 672

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# perfect.pl -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com>
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/09/29 12:14:42
#
# 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;

sub divsor($){
    my ($n) = @_;
    grep { $n % $_ == 0 } (1..$n);
}

sub doublePerfect($){
    my ($n) = @_;
    my @div = divsor($n);
    List::Util::sum(@div) == $n*3;
}


my @result = grep { doublePerfect $_ } (1..10_000);
print "@result\n";