【发布时间】:2014-06-29 04:02:47
【问题描述】:
在制作素数列表时,需要检查一个数字是否可以被任何等于或小于其平方根的素数整除。但是,与其每次检查质数是否大于被检查数字的平方根(如本页所做的那样:Optimize prime number finder and cpu speed checker in R),如果知道它在列表中的位置将会很有用。在素数列表中,数字与大于其平方根的最小素数的位置之间是否存在任何关系或方程。以下代码(在 R 中)和图表显示可能存在关系:
pnum_sqrtpos_plot = function(){
p_nums = c(2L,3L)
counter = 3L
sqrtcounter=1L
sqrtposlist = c(1L,1L)
countchecker=10000
while (counter<200000){
isPRIME = FALSE
counter = counter +2L
sqrtcounter = sqrt(counter)
for(n in p_nums) {
if(n > sqrtcounter){ isPRIME=TRUE; break; }
if(counter %% n == 0){ isPRIME = FALSE; break;}
}
if(isPRIME) { p_nums[length(p_nums)+1]=counter
sqrtpos = which(p_nums>sqrt(counter))[1]
sqrtposlist[length(sqrtposlist)+1] = sqrtpos
}
if(counter > countchecker) {cat("Numbers checked: ",counter,"\n");
counterchecker = countchecker+10000;
}
}
plot(p_nums, sqrtposlist
, main="Relation between number & \nposition of smallest prime larger than its square root in list of primes"
, xlab="Number", ylab="Position in list of prime numbers")
}
可能是什么关系/方程式?感谢您的帮助。
【问题讨论】:
-
素数定理是一个很好的起点。大约有 n / log(n) 个小于 n 的素数。尝试询问数学 stackexchange。
-
这个问题似乎跑题了,因为它是关于数学而不是编程的。
-
pi(n) ~= n/log(n); pi(sqrt(n)) ~= 2*sqrt(n)/log(n) 是一个近似值。
-
感谢您的信息。但是,如果我保留此标准,则会包括一些非素数。即使是 3*sqrt... 也包括一些非素数。但是,4*sqrt... 似乎可以正常工作。