In [2]:
from functools import reduce
from gmpy2 import is_prime
import numpy
from math import sqrt
import itertools

In [3]:
def fib_gen(limit=None, a=None, b=None):
    if a is None:
        a = 1
        yield a
    if b is None:
        b = 1
        yield b
    
    while (limit is None or b <= limit):
        a, b = b, a+b
        yield b

In [46]:
def factorization(n):
    if is_prime(n):
        return([n])
    result = []
    new_n = n
    for p in primesfrom2to(n//2 + 1):
        if p > new_n:
            break
        while True:
            if new_n % p == 0:
                result.append(p)
                new_n = new_n // p
            else:
                break
    return result

In [47]:
# http://stackoverflow.com/a/3035188/2597564
def primesfrom2to(n):
    """ Input n>=6, Returns a array of primes, 2 <= p < n """
    sieve = numpy.ones(n//3 + (n%6==2), dtype=numpy.bool)
    for i in range(1,int(n**0.5)//3+1):
        if sieve[i]:
            k=3*i+1|1
            sieve[       k*k//3     ::2*k] = False
            sieve[k*(k-2*(i&1)+4)//3::2*k] = False
    return numpy.r_[2,3,((3*numpy.nonzero(sieve)[0][1:]+1)|1)]

In [1]:
# http://stackoverflow.com/a/19578818/2597564
def factors(n):
        step = 2 if n%2 else 1
        return set(reduce(list.__add__,
                    ([i, n//i] for i in range(1, int(sqrt(n))+1, step) if n % i == 0)))

In [3]:
def triangle_gen():
    count = 0
    for i in itertools.count(start=1):
        count += i
        yield count

In [ ]: