/extra/project-euler/169/169.factor
http://github.com/abeaumont/factor · Factor · 42 lines · 11 code · 12 blank · 19 comment · 1 complexity · 7848b6f4369b70c339f3bf01bf142116 MD5 · raw file
- ! Copyright (c) 2007 Samuel Tardieu.
- ! See http://factorcode.org/license.txt for BSD license.
- IN: project-euler.169
- USING: combinators kernel math math.functions memoize project-euler.common ;
- ! http://projecteuler.net/index.php?section=problems&id=169
- ! DESCRIPTION
- ! -----------
- ! Define f(0) = 1 and f(n) to be the number of different ways n can be
- ! expressed as a sum of integer powers of 2 using each power no more than
- ! twice.
- ! For example, f(10) = 5 since there are five different ways to express 10:
- ! 1 + 1 + 8
- ! 1 + 1 + 4 + 4
- ! 1 + 1 + 2 + 2 + 4
- ! 2 + 4 + 4
- ! 2 + 8
- ! What is f(10^25)?
- ! SOLUTION
- ! --------
- MEMO: fn ( n -- x )
- {
- { [ dup 2 < ] [ drop 1 ] }
- { [ dup odd? ] [ 2/ fn ] }
- [ 2/ [ fn ] [ 1 - fn ] bi + ]
- } cond ;
- : euler169 ( -- result )
- 10 25 ^ fn ;
- ! [ euler169 ] 100 ave-time
- ! 0 ms ave run time - 0.2 SD (100 trials)
- SOLUTION: euler169