Use math.primes in project Euler problems

db4
Samuel Tardieu 2007-12-27 04:04:39 +01:00
parent e17a77f5cd
commit caa2a606c2
4 changed files with 18 additions and 19 deletions

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math project-euler.common sequences ; USING: math.primes.factors sequences ;
IN: project-euler.003 IN: project-euler.003
! http://projecteuler.net/index.php?section=problems&id=3 ! http://projecteuler.net/index.php?section=problems&id=3
@ -17,12 +17,12 @@ IN: project-euler.003
! -------- ! --------
: largest-prime-factor ( n -- factor ) : largest-prime-factor ( n -- factor )
prime-factors supremum ; factors supremum ;
: euler003 ( -- answer ) : euler003 ( -- answer )
317584931803 largest-prime-factor ; 317584931803 largest-prime-factor ;
! [ euler003 ] 100 ave-time ! [ euler003 ] time
! 404 ms run / 9 ms GC ave time - 100 trials ! 2 ms run / 0 ms GC time
MAIN: euler003 MAIN: euler003

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.miller-rabin ; USING: lazy-lists math math.primes ;
IN: project-euler.007 IN: project-euler.007
! http://projecteuler.net/index.php?section=problems&id=7 ! http://projecteuler.net/index.php?section=problems&id=7
@ -18,12 +18,12 @@ IN: project-euler.007
! -------- ! --------
: nth-prime ( n -- n ) : nth-prime ( n -- n )
2 swap 1- [ next-prime ] times ; 1 - lprimes lnth ;
: euler007 ( -- answer ) : euler007 ( -- answer )
10001 nth-prime ; 10001 nth-prime ;
! [ euler007 ] time ! [ euler007 ] time
! 19230 ms run / 487 ms GC time ! 22 ms run / 0 ms GC time
MAIN: euler007 MAIN: euler007

View File

@ -1,7 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer, Samuel Tardieu. ! Copyright (c) 2007 Aaron Schaefer, Samuel Tardieu.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays kernel lazy-lists math math.erato math.functions math.ranges USING: math.primes sequences ;
namespaces sequences ;
IN: project-euler.010 IN: project-euler.010
! http://projecteuler.net/index.php?section=problems&id=10 ! http://projecteuler.net/index.php?section=problems&id=10
@ -17,12 +16,12 @@ IN: project-euler.010
! SOLUTION ! SOLUTION
! -------- ! --------
! Sieve of Eratosthenes and lazy summing ! Summing of prime numbers
: euler010 ( -- answer ) : euler010 ( -- answer )
0 1000000 lerato [ + ] leach ; 1000000 primes-upto sum ;
! [ euler010 ] time ! [ euler010 ] 100 ave-time
! 765 ms run / 7 ms GC time ! 14 ms run / 0 ms GC ave time - 100 trials
MAIN: euler010 MAIN: euler010

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Samuel Tardieu. ! Copyright (c) 2007 Samuel Tardieu.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays kernel math.algebra math math.functions math.primes.list USING: arrays kernel lazy-lists math.algebra math math.functions math.primes
math.ranges sequences ; math.ranges sequences ;
IN: project-euler.134 IN: project-euler.134
@ -23,9 +23,9 @@ IN: project-euler.134
! SOLUTION ! SOLUTION
! -------- ! --------
! Compute the smallest power of 10 greater than m ! Compute the smallest power of 10 greater than m or equal to it
: next-power-of-10 ( m -- n ) : next-power-of-10 ( m -- n )
10 swap log 10 log / >integer [ 10 * ] times ; foldable 10 swap log 10 log / ceiling >integer ^ ; foldable
! Compute S for a given pair (p1, p2) -- that is the smallest positive ! Compute S for a given pair (p1, p2) -- that is the smallest positive
! number such that X = p1 [npt] and X = 0 [p2] (npt being the smallest ! number such that X = p1 [npt] and X = 0 [p2] (npt being the smallest
@ -34,7 +34,7 @@ IN: project-euler.134
over 0 2array rot next-power-of-10 rot 2array chinese-remainder ; over 0 2array rot next-power-of-10 rot 2array chinese-remainder ;
: euler134 ( -- answer ) : euler134 ( -- answer )
primes-under-million 2 tail dup 1 tail 1000003 add [ s ] 2map sum ; 5 lprimes-from [ 1000000 > ] luntil [ [ s + ] keep ] leach drop ;
! [ euler134 ] 10 ave-time ! [ euler134 ] 10 ave-time
! 6743 ms run / 79 ms GC ave time - 10 trials ! 6743 ms run / 79 ms GC ave time - 10 trials