PRIMOS.LSP



=>
=>
; <================== se ejecuta con: (PRIMOS x) ===============================>
=>

=>
=>
=>
; <================== en ambas funciones x debe ser la misma ===================>


(defun primos (n)                                  ; #include <iostream.h>
                                                   ; const int n = 1000;
   (setf prim (make-array (+ 1 n)))                ; void main(void)
                                                   ; {
                                                   ;   int i,j, a[n+1];
   (do ((i 2 (+ i 1))) ((> i n))                   ;   for (a[1] = 0, i = 2; i<=n; i++)
      (setf (aref prim i) 1))                      ;        a[i] = 1;

   (do ((i 2 (+ i 1))) ((> i (truncate n 2)))      ;   for (i=2; i<=n/2; i++)
      (do ((j 2 (+ j 1))) ((> j (truncate n i)))   ;      for (j=2;j<=n/i;j++)
          (setf (aref prim (* i j)) 0)             ;         a[i*j]=0;
      )
   )

   (if (> (aref prim n) 0) (return-from primos t) (return-from primos nil))
)

(defun muestra_todos (n)
   (do ((i 1 (+ i 1))) ((> i n))                 ;   for (i=1; i<=n; i++)
      (if (> (aref prim i) 0) (print i))         ;      if(a[i]) cout << i << ' ';
   )                                             ;    cout << '\n';
                                                 ; }
)