#!/usr/bin/perl
# 輸入 : 正整數 n
# 輸出 : 小於 n 之完全數
sub perfect {
my $n = shift;
my ($c, $i);
$c = 1;
for $i (1..$n) {
if (is_perfect($i)==1) {
printf "%d %d\n", $c, $i;
$c++;
}
}
}
# 輸入 : 正整數 n
# 輸出 : 小於 n 之盈數
sub abundant {
my $n = shift;
my ($c, $i);
$c = 1;
for $i (1..$n) {
if (is_perfect($i)==2) {
printf "%d %d\n", $c, $i;
$c++;
}
}
}
# 輸入 : 正整數 n
# 輸出 : 小於 n 之虧數
sub deficient {
my $n = shift;
my ($c, $i);
$c = 1;
for $i (1..$n) {
if (is_perfect($i)==3) {
printf "%d %d\n", $c, $i;
$c++;
}
}
}
# 判斷完全數、盈數、虧數
# 輸入 : 正整數 n
# 輸出 : 完全數傳回 1, 盈數傳回 2, 虧數傳回 3, 錯誤傳回 0
sub is_perfect {
my $n = shift;
my ($i, $sum);
return 0 if ($n<1);
$i = 1;
$sum = 0;
while ($i<$n) {
$sum += $i if ($n%$i==0);
$i++;
}
return 1 if ($sum==$n);
return 2 if ($sum>$n);
return 3 if ($sum<$n);
}
文章標籤
全站熱搜
