我正在尝试编写一个子例程来确定传入的数字是否为素数,并且它无法正常工作。我传入的数字不应该被认定为素数。是否存在逻辑错误,或者我错过了Perl的某些内容?
sub isPrime {
my ( $n ) = @_;
for ( my $i = 3 ; $i < $n ; $i++ ) {
if ( $n % $i == 0 ) {
return 0;
}
else {
return 1;
}
}
}
答案 0 :(得分:0)
目前你的函数检查n是否不能被3整除,因为它在fisrt测试后立即调用return
。
尝试在return 0
循环中创建函数for
,在其外部return 1
创建函数,或者为最初为true的数字设置一个标志,并在之后返回其值循环。
您还应该以2开始for
循环,而不是3开始,否则您不会测试偶数。
答案 1 :(得分: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!");
}