我是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";
}
}
答案 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 :(得分:1)
查看CPAN,它有许多有用的东西,比如库来生成素数。
$ perl -MCPAN -e 'install Math::Prime::Util'
$ perl -MMath::Prime::Util=:all -E 'say for @{ primes ( 0, 1000)} '
答案 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;