素数总和总是 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);