def factorial_python(n, p):
    f = ZZ(1)
    for i in xrange(ZZ(2),n+ZZ(1)):
        f = (f*i)%p
    return f



def sumdiv_python(D):
    v = divisors(ZZ(D))
    return sum(v)

def sumto_python(D):
    return sum(xrange(D))

def summod_python1(D, n):
    return sum(xrange(D)) % n

def summod_python2(D, n):
    for t in xrange(D):
        s = (s + t) %n
    return s

