perl中的素数

时间:2014-11-25 18:40:36

标签: perl for-loop numbers primes

我是Perl的新手。我正在尝试打印2N(用户输入)之间的所有素数。请参阅下面的示例代码。

使用用户输入数字后面的代码,控制台打印相同的数字。对于例如,如果我输入7,则脚本会打印7而不是27的所有素数。

#!/usr/bin/perl 

print "Enter the number till which you want to generate prime numbers"; 
$n=<STDIN>; 
chomp($n); 
print "The prime numbers between 2 and $n are:\n";
for($i=3;$i<=n;$i++) 
{ 
  for($j=2;$j<$n;$j++) 
 { 
  if(($i%$j)==0) 
   { 
     last;   # breaking out of the inner loop. 
   } 
 } 
 if($j==$n) 
  { 
    print "$i\n"; 
  } 
}

5 个答案:

答案 0 :(得分:3)

其中一个Abigail's .sigs 正则表达式 (!),用于确定数字是否为素数:

perl -le 'map {  print "Prime $_" if (1 x $_) !~ /^1?$|^(11+?)\1+$/ } 1..10001'

我的系统大约需要15秒。当然,正如evil-otto指出的那样,有更快的解决方案。

关于正则表达式如何在Neil Kandalgaonkar的优秀博客 1 上运行,有一个非常好的解释。阿比盖尔奇妙的大脑运作无法解释。

1)。请参阅:Abigail's regex to test for prime numbers

答案 1 :(得分:1)

查看CPAN,它有许多有用的东西,比如库来生成素数。

$ perl -MCPAN -e 'install Math::Prime::Util'
$ perl -MMath::Prime::Util=:all -E 'say for @{ primes ( 0, 1000)} '

https://metacpan.org/pod/Math::Prime::Util

答案 2 :(得分:0)

您获得最大数量并将其放入变量$n

您唯一的&#34;打印&#34;声明是在一个循环中说

if($j==$n) 
 { 
   print "$i\n"; 
 } 

如果$i(您正在测试的数字)是3,$j(您用来测试值的计数器)是3,$n是7,那么它不会告诉你3是素数。

答案 3 :(得分:0)

此代码应该可以使用

print "Enter the number till which you want to generate prime numbers"; 
$n=<STDIN>; 
chomp($n); 
print "The prime numbers between 2 and $n are:\n";
for($i=3;$i<=$n;$i++) 
{ 
    $is_prime = 1;
    for($j=2;$j<=sqrt($i);$j++){
        if($i % $j == 0){
            $is_prime = 0;
            break;
        }
    }
    if($is_prime == 1) {
        print $i."\n";
    }
}

答案 4 :(得分:0)

  

我还在等待第10001个素数被计算....所以我认为这可能会消耗掉分配的果汁......哇......但是这里有:

$a = 2;
$count = 0;


until($count eq 10) #choose the number of primes you want.. 

{
$var = 0;
  for($i = 1; $i < $a+1; $i++)
    {
        if($a % $i eq 0)
        {
            $var++;
        }

    }

  if($var eq 2)
  {
    $count++;
  }
  if($count eq 10) #if number of primes is reached... 
  {
    print "\n\nValue = $a\n\n";
  }

$a++;
}

exit;