Meissel–Mertens constant: Difference between revisions

Content added Content deleted
(New post.)
m (Minor improvement to code.)
Line 540: Line 540:
import java.util.List;
import java.util.List;


/**
* Calculates the Meissel-Mertens constant correct to 9 s.f. in approximately 15 seconds.
*/
public final class MeisselMertensConstant {
public final class MeisselMertensConstant {
Line 550: Line 547:
double sum = 0.0;
double sum = 0.0;
for ( double reciprocal : primeReciprocals ) {
for ( double reciprocal : primeReciprocals ) {
sum += reciprocal + Math.log(1.0 - reciprocal);
sum += reciprocal + Math.log(1.0 - reciprocal);
}
}
final double constant = euler + sum;
final double meisselMertens = euler + sum;
System.out.println("The Meissel-Mertens constant = " + constant);
System.out.println(String.format("%s%.9f", "The Meissel-Mertens constant = ", meisselMertens));
}
}
Line 561: Line 558:
sieve.set(2, aLimit + 1);
sieve.set(2, aLimit + 1);
final int squareRoot = (int) Math.sqrt(aLimit);
for ( int i = 2; i <= Math.sqrt(aLimit); i = sieve.nextSetBit(i + 1) ) {
for ( int i = 2; i <= squareRoot; i = sieve.nextSetBit(i + 1) ) {
for ( int j = i * i; j <= aLimit; j += i ) {
for ( int j = i * i; j <= aLimit; j += i ) {
sieve.clear(j);
sieve.clear(j);
Line 577: Line 573:


}
}
</syntaxhighlight>
{{ out }}
{{ out }}
<pre>
<pre>
The Meissel-Mertens constant = 0.26149721287104916
The Meissel-Mertens constant = 0.261497213
</pre>
</pre>