예제 #1
0
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)
예제 #2
0
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))
예제 #3
0
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)))
예제 #4
0
#!/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))]
    )