def print_info(max_list): import primes s = set(max_list) print s if all(map(lambda n: n %2 == 0, s)): print "all divisible by 2" lrg_factors = [] for n in s: lrg_factors.append(max(list(primes.factorGen(n)), key=lambda x: x[0])[0]) print "largest factors: {}".format(sorted(lrg_factors))
def numDivisors(n): import primes if n <= 1: return 0 factors = primes.factorGen(n) ans = 1 for _, x in factors: ans *= x + 1 return ans
def two_factor_sieve(numbers): maxes = {} for idx, number in enumerate(numbers): if number is None: continue assert idx == number, "{} {}".format(idx, number) factors = list(primes.factorGen(number)) if len(factors) < 2: numbers[idx] = None if len(factors) > 2: while idx < len(numbers): numbers[idx] = None idx += number if len(factors) == 2: maxes[(factors[0][0], factors[1][0])] = number return maxes
def divisorGen(n): import primes factors = list(primes.factorGen(n)) nfactors = len(factors) f = [0] * nfactors while True: yield reduce(lambda x, y: x * y, [factors[x][0] ** f[x] for x in range(nfactors)], 1) i = 0 while True: f[i] += 1 if f[i] <= factors[i][1]: break f[i] = 0 i += 1 if i >= nfactors: return