I'm trying to make a function to calculate the Log sum of primes over a limited range $1/2n$ to $n$ or Chebychev theta function over limited range $1/2n$ to $n$. This will be used only for even numbers.
To start off I'm trying to modify a function that works:
LogSumPrime[n_] := Total[Log[Table[Prime[i], {i, PrimePi[n]}]]];
this will output as desired for LogSumPrime[12]
:
Log[2] + Log[3] + Log[5] + Log[7] + Log[11]
So far so good. Now modifying to get range $1/2n$ to $n$:
LogSumAllUpperPrime[n_] :=
Total[Log[Table[(Prime[i + PrimePi[n] - PrimePi[n/2] + 1]),
{i, PrimePi[n] - PrimePi[n/2]}]]];
for LogSumAllUpperPrime[12]
, it is fine:
Log[7] + Log[11]
for LogSumAllUpperPrime[6]
, it is not fine:
Log[5]
It should be Log[3] + Log[5]
. Now the problem stems from half of 6 being odd and the limits not starting for this at 3, while for 12 it starts at 6 and the problem does not matter.
I do not understand Mathematica, so I cannot see how to solve this problem efficiently. If it were C, I'd just see if the bit is 1 or 0 to determine whether its even, but that may not be the best remedy here.
I would like to do this quite efficiently as I will be working with quite large numbers and the Table
approach is said to be reasonably efficient.
primePi
was input correctly then it depends on how that function is defined. If it was intended to bePrimePi[n/2]
then possibly use ofFloor
orCeiling
will remedy the issue. $\endgroup$primePi
$\endgroup$Table[Prime[i + PrimePi[n/2] - Boole[PrimeQ[n/2]]], {i, PrimePi[n] - PrimePi[n/2] + Boole[PrimeQ[n/2]]}]
$\endgroup$n/2
. It has been a long time since I saw this nifty function (like, three decades). I had forgotten all about it, and the relation to PNT. $\endgroup$