def divisor_sum(n): divisors = [1] for i in range(2, approx_int_sqrt(n)): if n % i == 0: divisors.append(i) divisors.append(n / i) return sum(divisors)
def compute_factors(n): from itertools import chain from pe_tools import approx_int_sqrt if is_prime(n): return [n] s = approx_int_sqrt(n) for p in chain(primes, xrange(max(primes), s, 2)): if n % p == 0: return [n] + get_factors(n/p) raise Exception("Failed to factor {}".format(n))
def get_answer(): for n in range(1, approx_int_sqrt(max_total)): for m in range(n+1, max_total/n, 2): if gcd(m,n) != 1: continue a = m*m - n*n b = 2*m*n c = m*m + n*n if a + b + c > max_total: break assert(a*a + b*b == c*c) for k in count(1): ka = k*a kb = k*b kc = k*c if ka + kb + kc > max_total: break assert ka**2 + kb**2 == kc**2 triples[ka+kb+kc] += 1 print "{}".format(len(filter(lambda x: x == 1, triples)))
#!/usr/bin/env python import primes from bisect import bisect_left, bisect_right from pe_tools import nCr, approx_int_sqrt below_n = 10 ** 8 def num_coprimes_with(p, relevant_primes): max_p = below_n / p assert p <= max_p return bisect_right(relevant_primes, max_p) - bisect_left(relevant_primes, p) if __name__ == "__main__": relevant_primes = sorted(list(filter((lambda x: x < below_n), primes.get_huge_prime_set()))) print sum( num_coprimes_with(n, relevant_primes) for n in relevant_primes[: bisect_right(relevant_primes, approx_int_sqrt(below_n))] )