作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
J 将通过 p:n 回答第 n 个素数。
如果我要求第 100 百万个素数,我几乎可以立即得到答案。我无法想象 J 会这么快地筛选那个素数,但都没有在表中查找,因为该表的大小约为 1GB。
有一些方程给出了一个界限的素数数量的近似值,但它们只是近似值。
J 怎么这么快就找到答案了?
最佳答案
J 用一张表开始,然后计算
NOTE! This is speculation, based on benchmarks (shown below).
p:1e8 NB. near-instant
p:1e8-1 NB. noticeable pause
p:
在我的机器上执行(iMac i5,16G RAM)。我正在使用J803。结果很有趣。我猜时间图中的锯齿图案(在“高达 2e5”图中可见)与查找表相关,而整体对数形状(在“高达 1e7”图中可见)与 CPU 相关。
NB. my test script
ts=:3 : 0
a=.y
while. a do.
c=.timespacex 'p:(1e4*a)' NB. 1000 times a
a=.<:a
b=.c;b
end.
}:b
)
a =: ts 200
require'plot'
plot >0{each a NB. time
plot >1{each a NB. space
p:
最多 2e5)
p:
最多 1e7)
Currently, arguments larger than 2^31 are tested to be prime according to a probabilistic algorithm (Miller-Rabin).
v2.c
包含这个功能:
static F1(jtdetmr){A z;B*zv;I d,h,i,n,wn,*wv;
RZ(w=vi(w));
wn=AN(w); wv=AV(w);
GA(z,B01,wn,AR(w),AS(w)); zv=BAV(z);
for(i=0;i<wn;++i){
n=*wv++;
if(1>=n||!(1&n)||0==n%3||0==n%5){*zv++=0; continue;}
h=0; d=n-1; while(!(1&d)){++h; d>>=1;}
if (n< 9080191)*zv++=spspd(31,n,d,h)&&spspd(73,n,d,h);
else if(n<94906266)*zv++=spspd(2 ,n,d,h)&&spspd( 7,n,d,h)&&spspd(61,n,d,h);
else *zv++=spspx(2 ,n,d,h)&&spspx( 7,n,d,h)&&spspx(61,n,d,h);
}
RE(0); R z;
} /* deterministic Miller-Rabin */
关于J 素数枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638573/
我是一名优秀的程序员,十分优秀!