perl 中的质数

问题描述 投票:0回答:6

我是 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"; } }


perl for-loop numbers primes
6个回答
3
投票

$ 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


3
投票
Abigail 的 .sigs

之一有一个 regex(!),用于确定数字是否为质数: perl -le 'map { print "Prime $_" if (1 x $_) !~ /^1?$|^(11+?)\1+$/ } 1..10001'

在我的系统上大约需要 15 秒。当然,正如
evil-otto

指出的那样,还有更快的解决方案。

Neil Kandalgaonkar

的优秀博客1 上有关于正则表达式如何工作的非常好的解释。阿比盖尔奇妙的大脑的运作方式至今无法解释。

1)。请参阅:
Abigail 的正则表达式来测试素数

Link 使用 WayBack,这是必需的。原文参考:

http://neilk.net/blog/2000/06/01/abigails-regex-to-test-for-prime-numbers/


0
投票
$n


您唯一的“打印”语句位于一个循环中,表示

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

如果
$i

(您正在测试的数字)是3,

$j
(您用于测试值的计数器)是3,并且
$n
是7,那么它不会告诉您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"; } }



0
投票
我仍在等待计算第 10001 个素数...所以我认为这可能会消耗大量的果汁...bluh..但是这里是:

$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;


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.