这个帖子很有趣啊!我也来贴一个自己的算法:
<br />
prime1 <- function(x,out=F)<br />
{<br />
if(x<=1) cat('请输入大于1的数!!!')<br />
else if(x==2) cat('素数是: 2')<br />
else if(x==3) cat('素数是: 2 3')<br />
else<br />
{<br />
a <- 2:x<br />
b <- floor(sqrt(x))<br />
m <- NULL<br />
sapply(2:b,function(y) {n <- seq(y^2,x,y);a[n-1] <<- 0})<br />
if(out) cat('素数是:',a[which(a!=0)],'\n','共有',length(a[which(a!=0)]),'个素数.','\n')<br />
else return(a[which(a!=0)])<br />
}<br />
}</p>
<p>myprime <- function(x,out=F)<br />
{<br />
if(x<=1) cat('请输入大于1的数!!!')<br />
else if(x==2) cat('素数是: 2')<br />
else<br />
{<br />
a <- c(2,seq(3,x-sum(x%%2==0),2))<br />
b <- floor((sqrt(x)-1)/2)<br />
if(b!=0) sapply(1:b,function(y) {n <- seq((2*y^2+2*y+1),ceiling(x/2),2*y+1);a[n] <<- 0})<br />
else a <- a<br />
if(out) cat('素数是:',a[which(a!=0)],'\n','共有',length(a[which(a!=0)]),'个素数.','\n')<br />
else return(a[which(a!=0)])<br />
}<br />
}</p>
<p>> system.time(replicate(1e3,prime1(1e3)));system.time(replicate(1e3,myprime(1e3)))<br />
用户 系统 流逝<br />
2.91 0.00 2.98<br />
用户 系统 流逝<br />
1.67 0.00 1.70<br />
> system.time(replicate(1e2,prime1(1e4)));system.time(replicate(1e2,myprime(1e4)))<br />
用户 系统 流逝<br />
1.25 0.00 1.25<br />
用户 系统 流逝<br />
0.59 0.00 0.60<br />
> system.time(replicate(1e1,prime1(1e5)));system.time(replicate(1e1,myprime(1e5)))<br />
用户 系统 流逝<br />
0.85 0.00 0.87<br />
用户 系统 流逝<br />
0.31 0.00 0.31<br />
> system.time(replicate(1e0,prime1(1e6)));system.time(replicate(1e0,myprime(1e6)))<br />
用户 系统 流逝<br />
0.82 0.05 0.91<br />
用户 系统 流逝<br />
0.19 0.02 0.20<br />
</p>