       Looking for a "smart" index for a Do-loop (Revised!)

• To: mathgroup at smc.vnet.net
• Subject: [mg50331] Looking for a "smart" index for a Do-loop (Revised!)
• From: gilmar.rodriguez at nwfwmd.state.fl.us (Gilmar Rodr?guez Pierluissi)
• Date: Fri, 27 Aug 2004 02:57:54 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```Dear Mathematica Group:

The following program is used to calculate the Minimal Goldbach
Prime Partition Points corresponding to an even number n >= 4:

MGPPP[n_] := Block[{p, q},
Do[If[PrimeQ[q = (n - (p =
Prime[i]))], Return[{p, q}]], {i, PrimePi[n/2], 1, -1}]]

To visualize these points try:

ListPlot[Table[MGPPP[n], {n, 4, 100, 2}], PlotJoined -> True]

Notice that the index i starts at the value PrimePi[n/2].  Next, 1 is
sustracted from PrimePi[n/2] (as long as q = n- Prime[i] is not
prime),
with i (possibly) reaching the value 1.

Now, I'm attempting to reduce the number of iterations of my index i,
to make my program faster.
Let K = PrimePi[n/2], and L = PrimePi[Ceiling[Sqrt[n]]].
Rather than {i, K, 1, -1}, I want to use {i, K, L, -1} in the above
"Do-loop".
The value PrimePi[Ceiling[Sqrt[n]]] takes advantage of the so called
"Knjzek p lower bound".

To visualize the geometry involved, please visit:

http://gilmarlily.netfirms.com/goldbach/knjzekbands.htm

The program takes the primes between Prime[PrimePi[n/2]] and
Prime[PrimePi[Ceiling[Sqrt[n]]]] and looks for the first instance in
which
(n - Prime[i]) is prime for i = K, K-1, K-2, ..., perhaps up to L.
When the program finds (n - Prime[i]) prime, it stops and returns
MGPPP[n].

The problem with attempting:

MGPPP[n_] := Block[{p, q},
Do[If[PrimeQ[q = (n - (p =
Prime[i]))], Return[{p, q}]], {i, K, L, -1}]]]

is that the do-loop will not work for 4 <=n <= 8.  Keep in mind that i
assumes values K, K-1, ...., until reaching L.
The program works for n > 8 though, since for these n's, K is large
enough to loop its way to L.  To see this try:

Table[{n,PrimePi[Ceiling[Sqrt[n]]],PrimePi[n/2]},{n,
4,300,2}]//TableForm

and:

Table[{n,Prime[PrimePi[Ceiling[Sqrt[n]]]],Prime[PrimePi[n/2]]},{n,
4,300,2}]//TableForm

I would like to modify the above program to do something like this:

MGPPP[n_] := Module[{p, q},
{m = n/2; If[Element[m,
Primes], {p = m, q = m}, {K =
PrimePi[m], If[Element[n], {4, 6, 8}], L = 1, L =
PrimePi[Ceiling[Sqrt[
n]]]; Do[If[Element[n - Prime[
i], Primes], hit = i; Break[]], {i, K, L, -1}], p = Prime[
hit], q = n - p}]}; {p, q}]

In other words; if 4 <=n <= 8  the lower index L becomes 1, if not
(i.e. n > 8)
L = PrimePi[Ceiling[Sqrt[n]]].   I'm looking for a "smart" index for
my Do-loop, but
any other approach to make this program work (using L) is definitely
welcomed!