this one-liner is faster, run to 100000 in 0.5 seconds .
perl -e '@screen=(0,0,2..$ARGV[0]); map { my $p=$_; if ($screen[$p]) { $screen[$_ * $p]=0 for 2..$#screen/$p }} 2..sqrt($#screen); print qq($_\n) for grep {$_} @screen' $1
2009/5/20 Anthony WU <anthonywuy2k@gmail.com>
質數不會是2及其倍數……
所以用 for (my $a=3;$a<100000;$a+=2) 最少能減少一半運行時間
-------- Original Message --------
Subject: [PerlChina] 最简单的求素数算法
From: 钟声 <gh00920307@163.com>
To: perlchina <perlchina@googlegroups.com>
Date: 20/5/2009 11:23
帮忙看下这是不是最简单的求素数算法
open TEXT,">value.txt";
@prime = (2..100000);
@list=();
while(my $a=shift @prime){
push @list,$a;
@prime = grep ($_%$a, @prime);
}
print TEXT (join " ",@list);
用了大概20多秒。。还有更快的吗
grip和map中第一个参数能不能用子进程呢
穿 越地震带 纪念汶川地震一周年
-- Best Regards, Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论