summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2011-12-03 19:25:57 +0100
committerReiner Herrmann <reiner@reiner-h.de>2014-08-31 20:35:09 +0200
commit8b5700048e51297ffdd160b6f743ff02a0418c85 (patch)
tree0e903b509999aa30a01b55549bd0d576481054c7
parentbdfe75ef8a7be289657d53e38f18439d1cd876e1 (diff)
projecteuler: alternate solution for 69; solution for 80
-rw-r--r--src/projecteuler/069_2.py22
-rw-r--r--src/projecteuler/080.py55
-rw-r--r--src/projecteuler/common.c1
3 files changed, 78 insertions, 0 deletions
diff --git a/src/projecteuler/069_2.py b/src/projecteuler/069_2.py
new file mode 100644
index 0000000..c00483b
--- /dev/null
+++ b/src/projecteuler/069_2.py
@@ -0,0 +1,22 @@
+#
+# n/phi(n) is a maximum, if phi(n) is minimal
+#
+# phi(n) = n*(1-1/p1)*(1-1/p2)*...*(1-1/pi)
+# n/phi(n) = 1/((1-1/p1)*(1-1/p2)*...*(1-1/pi))
+# -> smallest primes
+#
+
+from common import sieve
+
+primes = sieve(100).primes()
+prime_list = [ x for x in primes ]
+prime_list.sort()
+
+x = 1
+for p in prime_list:
+ if x*p > 1000000:
+ break
+ x *= p
+
+print x
+
diff --git a/src/projecteuler/080.py b/src/projecteuler/080.py
new file mode 100644
index 0000000..9becd19
--- /dev/null
+++ b/src/projecteuler/080.py
@@ -0,0 +1,55 @@
+
+# schriftliches wurzelziehen: http://www.diaware.de/html/wurzel.html
+
+def sqrt(x, accuracy):
+ a = [] # vor komma
+ b = [] # nach komma
+
+ groups = []
+ while x > 0:
+ groups.append(x % 100)
+ x /= 100
+ groups = groups[::-1]
+
+ result = 0
+ remainder = 0
+ while accuracy > 0:
+ group = 100 * remainder
+ if len(groups) > 0:
+ group += groups[0]
+
+ subcount = 0
+ sub = 20*result + 1
+ while sub < group:
+ group -= sub
+ if group < 0:
+ break
+ subcount += 1
+ sub += 2
+ remainder = group
+ if subcount == 0:
+ remainder *= 100
+ result *= 10
+ result += subcount
+
+ if len(groups) > 0:
+ a.append(subcount)
+ del groups[0]
+ else:
+ b.append(subcount)
+ accuracy -= 1
+
+ return (a, b)
+
+squares = set([ x*x for x in range(11) ])
+
+digitsum = 0
+
+for n in xrange(100):
+ if n in squares:
+ continue
+ s = sqrt(n, 100)
+ digitsum += sum(s[0]) + sum(s[1])
+
+print digitsum
+
diff --git a/src/projecteuler/common.c b/src/projecteuler/common.c
index 52e5173..69f87c5 100644
--- a/src/projecteuler/common.c
+++ b/src/projecteuler/common.c
@@ -1,6 +1,7 @@
#include <stdlib.h>
#include <string.h>
+// returns list of primes up to limit; count stored in first element
extern unsigned long* primes(unsigned long limit)
{
unsigned long i = 2; // start sieving with 2