home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1990 / 03 / schulman.lst < prev    next >
File List  |  1990-02-13  |  1KB  |  61 lines

  1. INSIDE WATCOM C 7.0/386
  2. by Andrew Schulman
  3.  
  4. [LISTING ONE]
  5.  
  6. $ PRIMES.SET
  7. $ ISETL program to find number of primes <= n, using set notation
  8.  
  9. size := 1000 ;
  10. sqrt_size := fix(sqrt(size)) ;
  11. composites := {i*j : i in {3,5..sqrt_size}, j in {i..size div i}} ;
  12. primes := {2} + {3,5..size} - composites ;
  13. print size ;
  14. print #primes ;
  15.  
  16.  
  17. [LISTING TWO]]
  18.  
  19. $ PRIMES.TUP
  20. $ ISETL program to find number of primes <= n, using ordered tuples
  21.  
  22. $ tuple difference operator
  23. diff := func(t1, t2); 
  24.     return [i : i in t1 | i notin t2 ] ; 
  25. end;
  26.  
  27. size := 1000 ;
  28. sqrt_size := fix(sqrt(size)) ;
  29. composites := [i*j : i in [3,5..sqrt_size], j in [i..size div i]] ;
  30. primes := [2] + [3,5..size] .diff composites ;
  31. print size ;
  32. print #primes ;
  33.  
  34.  
  35. [LISTING THREE]
  36.  
  37. $ FIB.TUP
  38. $ ISETL program to find Fibonacci numbers, using dynamic programming
  39.  
  40. $ uses log(): only accurate up to 308 digits
  41. digits := func(x);
  42.     if (x = 0) then return 1 ;
  43.     else return 1 + floor(log(abs(x))) ;
  44.     end;
  45. end;
  46.  
  47. $ use "dynamic programming" to assign to fib()
  48. fib := func(x);
  49.     fib(x) := fib(x-1) + fib(x-2) ;
  50.     return fib(x) ;
  51. end;
  52.  
  53. fib(0) := 1 ;
  54. fib(1) := 1 ;
  55.  
  56. fibonacci := [fib(x) : x in [1 .. 1000 ] ] ;
  57. print fibonacci(1000) ;
  58. print digits(fibonacci(1000)) ;
  59.  
  60.  
  61.