在设计算法时,我遇到了这个问题。这不是作业。
定义 P_i 为前 i 个质数的数组。现在我需要找到最小的 i
,使得
Sum<n=0..i> 1 / (P_i[n]*P_i[n]) >= 1.
如果存在这样的i
,则:
i
质数的近似值为i*log(i)
。 因此,我在Java中尝试了这个方法:
public static viod main(String args[]) {
double sum = 0.0;
long i = 2;
while(sum<1.0) {
sum += 1.0 / (i*Math.log(i)*i*Math.log(i));
i++;
}
System.out.println(i+": "+sum);
}
然而,上述方法并没有结束,因为它会收敛到0.7。然而,在Java中,
1/100000000^2
会被计算成0.0
,所以这就是为什么它不起作用的原因。出于同样的原因,即使您将第6行替换为以下内容,它也不起作用:sum += 1.0 / (i*i)
如果我没错的话,这个值应该达到1
,因为总和增加得比1/2^i
更快,而后者趋向于1
。换句话说,这表明Java的舍入导致总和无法达到1
。我认为我的问题的最小值i
应该存在。