2015-09-20 91 views
0

我正在尝试编写一个子程序,用于确定传入的数字是否为质数,并且它不能正常工作。我输入的数字不应被识别为主要数据。有没有逻辑错误,或者我错过了一些关于Perl的东西?Perl:查找给定的数字是否是素数

sub isPrime { 

    my ($n) = @_; 

    for (my $i = 3 ; $i < $n ; $i++) { 

     if ($n % $i == 0) { 
      return 0; 
     } 
     else { 
      return 1; 
     } 
    } 
} 
+0

你知道偶数不是素数吗? –

+1

您只需要测试sqrt($ n)。对于大型的n,有更有效的方式(谷歌素数号码)。 – xxfelixxx

+1

也应删除else块,并在for循环后放回1。 – xxfelixxx

回答

0

目前您的功能检查只是如果n是不能被3整除,因为它最前一页测试后立即调用return

尝试使for循环内的函数return 0return 1位于其外部,或者为该数字设置一个标志,该数字最初为真,并在循环后返回其值。

您还应该在2开始您的for循环,而不是3,否则您不测试偶数。

+0

我按照你的建议做了一些修改,看起来效果更好,但是仍然没有正确地进行素数。 –

+1

返回$ bool,而不是1. – Octi

+1

Omg ....多么愚蠢的错误。 –

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!"); 
}