I verified that it works for all numbers lower than 10000000.

My code:
(let N 2
   (while (> 10000000 N )
      (ifn (= N (apply '* (prime-factors N)))
         (print N))
      (inc 'N)))

2017-02-25 9:58 GMT+01:00 Alexander Burger <a...@software-lab.de>:

> Hi Lindsay, Joh-Tob,
>
> On Sat, Feb 25, 2017 at 09:36:04AM +0100, Joh-Tob Schäg wrote:
> > The purpose of the list is to increase the speed of the algorithm by
> > skipping some numbers. This is possible because of the math of
> Differences
>
> Correct.
>
> > between consecutive primes but i am currently verifying the algorithm if
> it
> > works, since the list might be wrong.
>
> I took it from Donald E. Knuth's "Art of Computer Programming", Volume 2
> (Seminumerical Algorithms). In "Factoring into Primes" on page 365 he
> writes:
>
>    The sequence ... of trial divisors .. can be taken to be simply 2, 3,
> 5, 7,
>    11, 13, 17, 19, 23, 25, 29, 31, 35, .. where we alternately add 2 and 4
> after
>    the first three terms.
>    ...
>    A further savings of 20 percent ... removing the numbers 30m +/- 5 ..
>
> I believe the term (let (D 2 L (1 2 2 . (4 2 4 2 4 6 2 6 .)) generates that
> sequence.
>
> ♪♫ Alex
>
>
> >
> > 2017-02-25 7:44 GMT+01:00 Lindsay John Lawrence <
> > lawrence.lindsayj...@gmail.com>:
> >
> > > Does anyone know the algorithm that is being expressed here?
> > >
> > > I am trying to understand the code... http://picolisp.com/wiki/?99p35
> > >
> > > de prime-factors (N)
> > >    (make
> > >       (let (D 2  L (1 2 2 . (4 2 4 2 4 6 2 6 .))  M (sqrt N))
> > >          (while (>= M D)
> > >             (if (=0 (% N D))
> > >                (setq M (sqrt (setq N (/ N (link D)))))
> > >                (inc 'D (pop 'L)) ) )
> > >          (link N) ) ) )
> > >
> > > and  having difficulties understanding the purpose of the circular
> list.
> > >
> > > /Lindsay
> > >
> > >
> > >
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>

Reply via email to