我正在尝试编写一个子例程来确定传入的数字是否为素数,但它无法正常工作。我传入的数字不应被识别为质数。是否存在逻辑错误,或者我遗漏了有关 Perl 的内容?
sub isPrime {
my ( $n ) = @_;
for ( my $i = 3 ; $i < $n ; $i++ ) {
if ( $n % $i == 0 ) {
return 0;
}
else {
return 1;
}
}
}
目前您的函数正在检查 n 是否不能被 3 整除,因为它在第一次测试后立即调用
return
。
尝试将函数
return 0
放在 for
循环内,将 return 1
放在循环外,或者为最初为 true 的数字设置一个标志,并在循环后返回其值。
您还应该在 2 处开始
for
循环,而不是 3 处,否则您就无法测试偶数。
这是我用大约 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!");
}
这是我的代码。它使用的逻辑是检查当前数字是否可以被它之前的任何数字(不包括任何偶数)整除。我希望它有帮助。
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;
}