查找给定数字中的除数数量?

时间:2014-06-03 23:28:50

标签: perl loops duplicates output repeat

我创建了一个Perl程序来计算数字 3 10 的可分数量。

示例:数字6有 4个除数 1,2,3和6.

这就是程序的工作方式:

程序将计算 3 的除数,然后将其打印到 report.txt 文件中。接下来,它将继续计算 4 的除数,并将其打印到 report.txt 。程序将执行此操作,直到计算出数字 10 ,然后它将关闭程序。

#!/usr/bin/perl
use warnings;
use strict;

my $num = 2; # The number that will be calculated
my $count = 1; # Counts the number of divisors
my $divisors; # The number of divisors

my $filename = 'report.txt';

open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; # open file "report.txt"

for (my $i=2; $i <= 10; $i++) {  

        while( $num % $i == 0) { # Checks if the number has a remainder.
            $num++; # Adds 1 to $num so it will calculate the next number.
            $count++; # counts the number of divisible numbers.
            $num /= $i; # $num = $num / $i. 
        }

    $divisors = $count; # The number of divisors are equal to $count.
    print $fh "$divisors\n"; # The output will be repeated..
}

close $fh # Closes the file "report.txt"

我认为问题在于for循环不断重复此代码:

print $fh "$divisors\n";

输出结果为:

2
2
2
2
2
2
2
2
2

但是,我不确定我到底错过了什么。

1 个答案:

答案 0 :(得分:1)

为变量提供有意义的名称。这有助于使代码自我记录,同时也有助于您识别何时错误地使用变量。变量名$i不会传达任何内容,但$divisor表示您正在测试该数字是否为除数。

至于为什么你的代码是循环的,不能说。这是一个重新格式化的代码版本,它可以运行:

#!/usr/bin/perl
use warnings;
use strict;
use autodie;

for my $num (2..10) {
    my $divisor_count = 0;
    for my $divisor (1..$num) {
        $divisor_count++ if $num % $divisor == 0;
    }
    print "$num - $divisor_count\n"
}

输出:

2 - 2
3 - 2
4 - 3
5 - 2
6 - 4
7 - 2
8 - 4
9 - 3
10 - 4