def factors(n): p = list(sieve(int(n / 2))) primes = [] for ii in range(len(p)): if n % p[ii] == 0: primes.append(p[ii]) d = n e = [] for a in range(len(primes)): while d % primes[a] == 0: d = d / primes[a] e.append(primes[a]) if np.prod(e) != n: print('oops!, n may be prime') n_occurence = [] for c in range(len(primes)): n_occurence.append(e.count(primes[c])) n_factors = np.prod(np.array(n_occurence) + 1) return n_factors, primes, e
def main(): MAX = 10 ** 6 primes = sieve(MAX + 1) sprimes = set(primes) longest = 0 sums = {} for n in xrange(1, MAX + 1): s, nums, snums = n, [], set() while s <= MAX: if s in sums: break nums.append(s) snums.add(s) t = spd(s, primes, sprimes) sums[s] = t s = t if s in snums: length = len(nums) - nums.index(s) if length > longest: longest = length ans = nums[nums.index(s)] print ans break print ans
def main(): MAX = 10**6 primes = sieve(MAX + 1) sprimes = set(primes) longest = 0 sums = {} for n in xrange(1, MAX + 1): s, nums, snums = n, [], set() while s <= MAX: if s in sums: break nums.append(s) snums.add(s) t = spd(s, primes, sprimes) sums[s] = t s = t if s in snums: length = len(nums) - nums.index(s) if length > longest: longest = length ans = nums[nums.index(s)] print ans break print ans
def main(): MAX = 5 * 10 ** 7 d = sieve(int(MAX ** 0.5) + 1) t = sieve(int(MAX ** (1.0/3)) + 1) q = sieve(int(MAX ** (0.25)) + 1) numbers = set() for qi in q: for ti in t: for di in d: n = qi * qi * qi * qi + ti * ti * ti + di * di if n < MAX: numbers.add(n) else: break print(len(numbers))
def main(): MAX = 100 primes = sieve(MAX) ways = [ 1 ] + [ 0 ] * MAX for p in primes: for i in xrange(p, MAX + 1): ways[i] += ways[i - p] for i in xrange(len(ways)): if ways[i] > 5000: print i return
def main(): MAX = 100 primes = sieve(MAX) ways = [1] + [0] * MAX for p in primes: for i in xrange(p, MAX + 1): ways[i] += ways[i - p] for i in xrange(len(ways)): if ways[i] > 5000: print i return
def n_cons_primes(limit, sieve_limit): primes = sieve(sieve_limit) n_max = 0 ab = 0 bb = 0 for a in range(-limit, 1, limit): for b in range(-limit, 1, limit): n = 0 break_ = 0 value = (n**2) + (a * n) + b while break_ == 0: if value in primes: n += 1 else: break_ = 1 n_temp = n if n_temp > n_max: n_max = n ab = a bb = b return n_max - 1, a, b
def main(): MAX = 10**7 lb = int(MAX**0.5) - 1000 ub = int(MAX**0.5) + 1000 primes = [p for p in sieve(ub) if p > lb] min_ratio = MAX dat_n = None for i in xrange(len(primes)): for j in xrange(i + 1, len(primes)): p1, p2 = primes[i], primes[j] n = p1 * p2 if n > MAX: break phi = (p1 - 1) * (p2 - 1) ratio = n / phi if ratio < min_ratio and is_perm(n, phi): min_ratio = ratio dat_n = n print dat_n
def main(): MAX = 10 ** 7 lb = int(MAX ** 0.5) - 1000 ub = int(MAX ** 0.5) + 1000 primes = [ p for p in sieve(ub) if p > lb ] min_ratio = MAX dat_n = None for i in xrange(len(primes)): for j in xrange(i + 1, len(primes)): p1, p2 = primes[i], primes[j] n = p1 * p2 if n > MAX: break phi = (p1 - 1) * (p2 - 1) ratio = n / phi if ratio < min_ratio and is_perm(n, phi): min_ratio = ratio dat_n = n print dat_n
from common import sieve N = 20 lst = range(1, N + 1) primes = sieve(N) lcm = 1 for prime in primes: while (True): found_a_multiple = False for i, n in enumerate(lst): if n % prime == 0: lst[i] /= prime found_a_multiple = True if found_a_multiple: lcm *= prime else: break print lcm
import numpy as np from common import sieve def multi(b): out = 1 for i in range(len(b)): out = out * b[i] return out n = 451000 p = list(reversed(sieve(int(n / 2)))) # print(p) primes = [] for ii in range(len(p)): if n % p[ii] == 0: primes.append(p[ii]) amax = int(np.ceil(np.log(n) / np.log(primes[0]))) print(amax) e = np.zeros(len(primes)) print(e) e_next = np.zeros(len(primes)) e_next[0] = amax print(e - e_next) i_last = np.nonzero(e - e_next)[0][0] print(len(primes))
from common import sieve N = 20 lst = range(1, N+1) primes = sieve(N) lcm = 1 for prime in primes: while(True): found_a_multiple = False for i, n in enumerate(lst): if n%prime == 0: lst[i] /= prime found_a_multiple = True if found_a_multiple: lcm *= prime else: break print lcm
from common import sieve n = 2000000 print sum(sieve(n))
# What is the value of the first triangle number # to have over five hundred divisors? import numpy as np from common import sieve def gen_triangle(x): tri = 0 for i in range(1, x + 1): tri = tri + i return tri p = list(sieve(70000)) def factors(n, primes): if n in primes: n_factors = 2 primes = [] e = [] else: primes = [] for ii in range(len(p)): if n % p[ii] == 0: primes.append(p[ii]) d = n e = [] for a in range(len(primes)):