Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

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

  • To: mathgroup at smc.vnet.net
  • Subject: [mg50343] Re: [mg50331] Looking for a "smart" index for a Do-loop (Revised!)
  • From: DrBob <drbob at bigfoot.com>
  • Date: Sat, 28 Aug 2004 04:37:55 -0400 (EDT)
  • References: <200408270657.CAA00744@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

Try:

Clear@MGPPP
MGPPP[n_?EvenQ]/;n>8:=Block[{p,q},Do[If[PrimeQ[
     q=(n-(p=Prime[i]))],Return[{
       p,q}]],{i,PrimePi[n/2],PrimePi[Ceiling[Sqrt[n]]],-1}]
     ]
MGPPP[n_?EvenQ]:=Block[{p,q},Do[If[PrimeQ[q=(n-(p=Prime[i]))],Return[{p,
         q}]],{i,PrimePi[n/2],1,-1}]
     ]
MGPPP/@Range[4,60,2]

{{2,2},{3,3},{3,5},{5,5},{5,7},{7,7},{5,11},{7,11},{7,13},{11,
   11},{11,13},{13,13},{11,17},{13,17},{13,
   19},{17,17},{17,19},{19,19},{17,23},{19,23},{13,31},{23,23},{19,29},{
     19,31},{23,29},{23,31},{19,37},{29,29},{29,31}}

or

Clear@MGPPP
MGPPP[n_?EvenQ]/;n>8:=Block[{p,q},Do[If[PrimeQ[
     q=(n-(p=Prime[i]))],Return[{
       p,q}]],{i,PrimePi[n/2],PrimePi[Ceiling[Sqrt[n]]],-1}]
     ]
MGPPP[4]={2,2};
MGPPP[6]={3,3};
MGPPP[8]={3,5};
MGPPP/@Range[4,60,2]

{{2,2},{3,3},{3,5},{5,5},{5,7},{7,7},{5,11},{7,11},{7,13},{11,
   11},{11,13},{13,13},{11,17},{13,17},{13,
   19},{17,17},{17,19},{19,19},{17,23},{19,23},{13,31},{23,23},{19,29},{
     19,31},{23,29},{23,31},{19,37},{29,29},{29,31}}

Bobby

On Fri, 27 Aug 2004 02:57:54 -0400 (EDT), Gilmar Rodr?guez Pierluissi <gilmar.rodriguez at nwfwmd.state.fl.us> wrote:

> 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!
>
> Thank you for your help!
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Re: Opposite of ReadList[ ... ,Byte]?
  • Next by Date: Re: FindMinimum and the minimum-radius circle
  • Previous by thread: Looking for a "smart" index for a Do-loop (Revised!)
  • Next by thread: Animate