Merge branch 'master' of git://factorcode.org/git/factor

db4
John Benediktsson 2008-12-29 12:26:20 -08:00
commit f5eb57e261
6 changed files with 62 additions and 23 deletions

View File

@ -1,7 +1,7 @@
! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: combinators io locals kernel math math.functions
math.ranges namespaces random sequences hashtables sets ;
USING: combinators kernel locals math math.functions math.ranges
random sequences sets ;
IN: math.miller-rabin
<PRIVATE
@ -37,7 +37,7 @@ PRIVATE>
{ [ dup 1 <= ] [ 3drop f ] }
{ [ dup 2 = ] [ 3drop t ] }
{ [ dup even? ] [ 3drop f ] }
[ [ drop (miller-rabin) ] with-scope ]
[ drop (miller-rabin) ]
} cond ;
: miller-rabin ( n -- ? ) 10 miller-rabin* ;

View File

@ -828,7 +828,7 @@ PRIVATE>
: supremum ( seq -- n ) dup first [ max ] reduce ;
: sigma ( seq quot -- n ) [ + ] compose 0 swap reduce ; inline
: sigma ( seq quot -- n ) 0 -rot [ rot slip + ] curry each ; inline
: count ( seq quot -- n ) [ 1 0 ? ] compose sigma ; inline

View File

@ -8,7 +8,7 @@ IN: math.primes.erato
2 * 3 + ; inline
: mark-multiples ( i arr -- )
[ dup index> [ + ] keep ] dip
[ index> [ sq >index ] keep ] dip
[ length 1 - swap <range> f swap ] keep
[ set-nth ] curry with each ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2007 Samuel Tardieu.
! See http://factorcode.org/license.txt for BSD license.
USING: binary-search combinators kernel lists.lazy math math.functions
math.miller-rabin math.primes.erato math.ranges sequences ;
USING: combinators kernel lists.lazy math math.functions
math.miller-rabin math.order math.primes.erato math.ranges sequences ;
IN: math.primes
<PRIVATE
@ -28,15 +28,11 @@ PRIVATE>
: lprimes-from ( n -- list )
dup 3 < [ drop lprimes ] [ 1- next-prime [ next-prime ] lfrom-by ] if ;
: primes-upto ( n -- seq )
dup 2 < [
drop V{ }
] [
3 swap 2 <range> [ prime? ] filter 2 prefix
] if ; foldable
: primes-between ( low high -- seq )
primes-upto [ 1- next-prime ] dip
[ natural-search drop ] [ length ] [ ] tri <slice> ; foldable
[ dup 3 max dup even? [ 1 + ] when ] dip
2 <range> [ prime? ] filter
swap 3 < [ 2 prefix ] when ;
: primes-upto ( n -- seq ) 2 swap primes-between ;
: coprime? ( a b -- ? ) gcd nip 1 = ; foldable

View File

@ -0,0 +1,43 @@
! Copyright (c) 2008 Samuel Tardieu
! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.functions math.parser sequences ;
IN: project-euler.057
! http://projecteuler.net/index.php?section=problems&id=57
! DESCRIPTION
! -----------
! It is possible to show that the square root of two can be expressed
! as an infinite continued fraction.
! √ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213...
! By expanding this for the first four iterations, we get:
! 1 + 1/2 = 3/2 = 1.5
! 1 + 1/(2 + 1/2) = 7/5 = 1.4
! 1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666...
! 1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...
! The next three expansions are 99/70, 239/169, and 577/408, but the
! eighth expansion, 1393/985, is the first example where the number of
! digits in the numerator exceeds the number of digits in the
! denominator.
! In the first one-thousand expansions, how many fractions contain a
! numerator with more digits than denominator?
! SOLUTION
! --------
: longer-numerator? ( seq -- ? )
>fraction [ number>string length ] bi@ > ; inline
: euler057 ( -- answer )
0 1000 [ drop 2 + recip dup 1+ longer-numerator? ] count nip ;
! [ euler057 ] time
! 3.375118 seconds
MAIN: euler057

View File

@ -15,13 +15,13 @@ USING: definitions io io.files io.pathnames kernel math math.parser
project-euler.041 project-euler.042 project-euler.043 project-euler.044
project-euler.045 project-euler.046 project-euler.047 project-euler.048
project-euler.052 project-euler.053 project-euler.055 project-euler.056
project-euler.059 project-euler.067 project-euler.071 project-euler.073
project-euler.075 project-euler.076 project-euler.079 project-euler.092
project-euler.097 project-euler.099 project-euler.100 project-euler.116
project-euler.117 project-euler.134 project-euler.148 project-euler.150
project-euler.151 project-euler.164 project-euler.169 project-euler.173
project-euler.175 project-euler.186 project-euler.190 project-euler.203
project-euler.215 ;
project-euler.057 project-euler.059 project-euler.067 project-euler.071
project-euler.073 project-euler.075 project-euler.076 project-euler.079
project-euler.092 project-euler.097 project-euler.099 project-euler.100
project-euler.116 project-euler.117 project-euler.134 project-euler.148
project-euler.150 project-euler.151 project-euler.164 project-euler.169
project-euler.173 project-euler.175 project-euler.186 project-euler.190
project-euler.203 project-euler.215 ;
IN: project-euler
<PRIVATE