Perl:判断给定数字是否是素数

问题描述 投票:0回答:3

我正在尝试编写一个子例程来确定传入的数字是否为素数,但它无法正常工作。我传入的数字不应被识别为质数。是否存在逻辑错误,或者我遗漏了有关 Perl 的内容?

sub isPrime {

    my ( $n ) = @_;

    for ( my $i = 3 ; $i < $n ; $i++ ) {

        if ( $n % $i == 0 ) {
            return 0;
        }
        else {
            return 1;
        }
    }
}
perl
3个回答
0
投票

目前您的函数正在检查 n 是否不能被 3 整除,因为它在第一次测试后立即调用

return

尝试将函数

return 0
放在
for
循环内,将
return 1
放在循环外,或者为最初为 true 的数字设置一个标志,并在循环后返回其值。

您还应该在 2 处开始

for
循环,而不是 3 处,否则您就无法测试偶数。


0
投票

这是我用大约 40 分钟编写的代码。效率低下不要恨,我还在学习perl。

print ("This is a prime number checker!\n");
print ("Enter a number below to check it:\n");
$y = 0;
$num = <>;
for ($i = $num; $i > 0; $i--) {
    if ($num % $i == 0) {
        $y += 1;
    }
}
if ($y > 2) {
    print ("$num is not a prime!");
} else {
    print ("$num is a prime!");
}

0
投票

这是我的代码。它使用的逻辑是检查当前数字是否可以被它之前的任何数字(不包括任何偶数)整除。我希望它有帮助。

sub is_prime {
    my ($num) = @_;

    return 0 if $num <= 2;
    return 0 if $num % 2 == 0 ;

    my @before;
    for (my $i = 3; $i < $num; $i += 2) {
       if($num % $i == 0){
            return 0;
       }
    }

    return 1;
}

© www.soinside.com 2019 - 2024. All rights reserved.