]> gitweb.factorcode.org Git - factor.git/commitdiff
Solution to Project Euler problem 63
authorAaron Schaefer <aaron@elasticdog.com>
Wed, 8 Apr 2009 01:36:38 +0000 (21:36 -0400)
committerAaron Schaefer <aaron@elasticdog.com>
Wed, 8 Apr 2009 01:36:38 +0000 (21:36 -0400)
extra/project-euler/063/063-tests.factor [new file with mode: 0644]
extra/project-euler/063/063.factor [new file with mode: 0644]
extra/project-euler/project-euler.factor

diff --git a/extra/project-euler/063/063-tests.factor b/extra/project-euler/063/063-tests.factor
new file mode 100644 (file)
index 0000000..0cff44d
--- /dev/null
@@ -0,0 +1,3 @@
+USING: project-euler.063 tools.test ;
+
+{ 49 } [ euler063 ] unit-test
diff --git a/extra/project-euler/063/063.factor b/extra/project-euler/063/063.factor
new file mode 100644 (file)
index 0000000..80e3990
--- /dev/null
@@ -0,0 +1,37 @@
+! Copyright (c) 2009 Aaron Schaefer.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel math math.functions math.ranges project-euler.common sequences ;
+IN: project-euler.063
+
+! http://projecteuler.net/index.php?section=problems&id=63
+
+! DESCRIPTION
+! -----------
+
+! The 5-digit number, 16807 = 7^5, is also a fifth power. Similarly, the
+! 9-digit number, 134217728 = 8^9, is a ninth power.
+
+! How many n-digit positive integers exist which are also an nth power?
+
+
+! SOLUTION
+! --------
+
+! Only have to check from 1 to 9 because 10^n already has too many digits.
+! In general, x^n has n digits when:
+
+!     10^(n-1) <= x^n < 10^n
+
+! ...take the left side of that equation, solve for n to see where they meet:
+
+!     n = log(10) / [ log(10) - log(x) ]
+
+! Round down since we already know that particular value of n is no good.
+
+: euler063 ( -- answer )
+    9 [1,b] [ log [ 10 log dup ] dip - /i ] sigma ;
+
+! [ euler063 ] 100 ave-time
+! 0 ms ave run time - 0.0 SD (100 trials)
+
+SOLUTION: euler063
index d60ae60126010467c6effee7618afa7993949e67..5d46d7f1fd61f6fd3c257b396ad5dde69920b5e9 100644 (file)
@@ -16,13 +16,13 @@ USING: definitions io io.files io.pathnames kernel math math.parser
     project-euler.045 project-euler.046 project-euler.047 project-euler.048
     project-euler.049 project-euler.052 project-euler.053 project-euler.054
     project-euler.055 project-euler.056 project-euler.057 project-euler.058
-    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.059 project-euler.063 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