素数总和总是 returns 0
Sum of Primes always returns 0
我在 Perl 中有一个代码,它接收一个数字并将所有素数相加等于该数字。我一直得到值 0,这意味着它没有更新我的 $sum
变量,但我不知道还能做什么。
sub checkPrime {
my($numb) = @_;
$primeCheck = "prime\n";
if ($numb == 1) {
$primeCheck = "notPrime\n";
}
for ($i = 2; $i < $numb; $i++) {
$mod = $numb % $i;
if ($mod == 0) {
$primeCheck = "notPrime\n"
}
}
return $primeCheck;
}
sub sumOfPrimes {
my($input) = @_;
$sum = 0;
for ($i = 2; $i <= $input; $i++) {
if (checkPrime($i) eq "prime") {
$sum = $sum + $i;
}
}
return $sum;
}
print sumOfPrimes(10);
您没有比较正确的字符串。设置值时包含换行符 (\n
),但比较时不包含换行符。变化:
if (checkPrime($i) eq "prime")
至:
if (checkPrime($i) eq "prime\n")
这是最简单的更改,但您可能根本不需要 \n
。
求和 prime numbers 您需要确定该数字是否为素数。让我们创建一个函数,如果数字是素数,则 returns 为 1,否则为 0。
sub isPrime {
my $n = shift;
return 0 unless $n > 1;
for( my $i = 2; $i < $n; $i++ ) {
return 0 if $n % $i == 0;
}
return 1;
}
现在遍历数字列表并仅对素数求和
$sum += $num if isPrime($num);
我在 Perl 中有一个代码,它接收一个数字并将所有素数相加等于该数字。我一直得到值 0,这意味着它没有更新我的 $sum
变量,但我不知道还能做什么。
sub checkPrime {
my($numb) = @_;
$primeCheck = "prime\n";
if ($numb == 1) {
$primeCheck = "notPrime\n";
}
for ($i = 2; $i < $numb; $i++) {
$mod = $numb % $i;
if ($mod == 0) {
$primeCheck = "notPrime\n"
}
}
return $primeCheck;
}
sub sumOfPrimes {
my($input) = @_;
$sum = 0;
for ($i = 2; $i <= $input; $i++) {
if (checkPrime($i) eq "prime") {
$sum = $sum + $i;
}
}
return $sum;
}
print sumOfPrimes(10);
您没有比较正确的字符串。设置值时包含换行符 (\n
),但比较时不包含换行符。变化:
if (checkPrime($i) eq "prime")
至:
if (checkPrime($i) eq "prime\n")
这是最简单的更改,但您可能根本不需要 \n
。
求和 prime numbers 您需要确定该数字是否为素数。让我们创建一个函数,如果数字是素数,则 returns 为 1,否则为 0。
sub isPrime {
my $n = shift;
return 0 unless $n > 1;
for( my $i = 2; $i < $n; $i++ ) {
return 0 if $n % $i == 0;
}
return 1;
}
现在遍历数字列表并仅对素数求和
$sum += $num if isPrime($num);