我是 Perl 新手。我正在尝试打印
2
和 N
(用户输入)之间的所有素数。请参阅下面的我的示例代码。
使用下面的代码,每当用户输入数字时,控制台都会打印相同的数字。例如,如果我输入 7
,脚本将打印
7
,而不是从 2
到 7
的所有质数。 #!/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";
}
}
之一有一个 regex(!),用于确定数字是否为质数:
perl -le 'map { print "Prime $_" if (1 x $_) !~ /^1?$|^(11+?)\1+$/ } 1..10001'
在我的系统上大约需要 15 秒。当然,正如evil-ottoNeil Kandalgaonkar
的优秀博客1 上有关于正则表达式如何工作的非常好的解释。阿比盖尔奇妙的大脑的运作方式至今无法解释。
1)。请参阅:$n
您唯一的“打印”语句位于一个循环中,表示
if($j==$n)
{
print "$i\n";
}
如果
$i
(您正在测试的数字)是3,
$j
(您用于测试值的计数器)是3,并且$n
是7,那么它不会告诉您3是质数。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";
}
}
$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;