Taddeus Kroes 13 lat temu
rodzic
commit
dd771dec6b
2 zmienionych plików z 45 dodań i 35 usunięć
  1. 20 35
      problem243.py
  2. 25 0
      problem381.py

+ 20 - 35
problem243.py

@@ -1,53 +1,38 @@
 #!/usr/bin/env python
 from __future__ import division
-from math import sqrt, ceil
+from primes import is_prime, nprimes
 
-def primes_until(n):
-    """ Sieve of Eratosthenes """
-    lst = [False] * n
-    i = 2
-
-    while i < n:
-        if not lst[i]:
-            yield i
-
-            for j in xrange(i, n, i):
-                lst[j] = True
-
-        i += 1
+print list(nprimes(15499))
+import sys; sys.exit()
 
 def times(a, b):
     return a * b
 
-def div(m, n):
-    return not divmod(n, m)[1]
-
-MAX = 2000000
-all_primes = list(primes_until(MAX))
+known_primes = {}
 
 def primes(n):
-    for p in all_primes:
-        if p >= n:
-            raise StopIteration
-
-        yield p
+    for p in range(2, n):
+        if p in known_primes:
+            yield p
+        elif is_prime(p):
+            known_primes[p] = None
+            yield p
 
 def phi(n):
-    return reduce(times, iter(1 - 1 / p for p in primes(n) if div(p, n)), n)
+    return reduce(times, iter(1 - 1 / p for p in primes(n) if not n % p), n)
 
 def resilience(d):
     return phi(d) / (d - 1)
 
-d = 2
+d = 30
+
+while True:
+    print d,
 
-try:
-    while resilience(d) >= 15499 / 94744:
-        d += 1
+    res = resilience(d)
 
-        if d == MAX:
-            print 'maximum reached:',
-            break
-except KeyboardInterrupt:
-    print 'interrupted:',
+    if res < 15499 / 94744:
+        break
 
-print d
+    print res, 15499 / 94744
+    d += 30

+ 25 - 0
problem381.py

@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+from math import gamma, factorial
+
+def S(p):
+    return sum(factorial(p - k) for k in range(1, 6)) % p
+
+def modfac(, p)
+
+facs = [factorial(p) for p in range(5)]
+total = s = S(5)
+pmin6fac = 0
+pmin1fac = factorial(5)
+print 5, S(5)
+
+N = 100
+facs = [factorial(p) % p for p in range(5)]
+
+for p in xrange(6, 1000000):
+    s = s - pmin6fac + pmin1fac
+    total += s % p
+    if s: print p, s % p
+    pmin6fac *= p - 5
+    pmin1fac *= p
+
+print total