在Perl中,我尝试编写一个简单的代码来查找数字是否可以表示为素数之和。示例代码如下所示:
sub funcIsPrime {
my $num = $_[0];
my $isPrime = 1;
for($i= 2; $i <= $num/2; $i++){
if($num%$i == 0){
$isPrime = 0;
last;
}
}
return $isPrime;
}
#my $num = <>;
my $num = 20;
for($i = 2; $i <= $num/2; $i++){
print "$i\t";
my $j = $num-$i;
print "$j\n";
if(funcIsPrime($i) and funcIsPrime($j)){ # Line x
print "$num = $i + $j\n";
}
}
第x行中的函数调用语句不执行。将同一行放在循环外部时效果很好。有什么可能的解决方案?请帮忙。谢谢。
答案 0 :(得分:1)
主要问题是变量声明中缺少my
。如果包含use warnings;
和use strict;
,Perl将不允许您运行该程序:
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at test.pl line 22.
Execution of test.pl aborted due to compilation errors.
这是简化的工作代码(顺便说一下,您可以搜索直到n的平方根的因子,尽管无论如何这都不是完美或有效的素数测试):
use strict;
use warnings;
sub isPrime {
my $num = $_[0];
for (my $i = int sqrt $num; $i > 1; $i--) {
if ($num % $i == 0) {
return 0;
}
}
return 1;
}
my $num = 20;
for (my $i = 2; $i <= $num / 2; $i++) {
my $j = $num - $i;
if (isPrime($i) && isPrime($j)) {
print "$num = $i + $j\n";
}
}
20 = 3 + 17
20 = 7 + 13